Python Matplotlib - 双 y 轴图中的脊柱着色问题

noc*_*non 5 python matplotlib

我正在编写一个脚本来通过 matplotlib 绘制绘图,以下代码是对我的原始脚本的类比,它重现了我遇到的问题。

def func(ax, data, color, position):    # A function for plotting
    ax.plot(data[0], data[1], color=color)
    ax.spines[position].set_color(color)

fig = plt.figure()
data_1 = [np.linspace(0, 1, 10), np.linspace(0, 10, 10)]
data_2 = [np.linspace(0, 1, 10), np.linspace(10, 0, 10)]

ax = fig.add_subplot(111)
func(ax, data_1, 'r', 'left')

ax_1 = ax.twinx()
func(ax_1, data_2, 'b', 'right')

plt.show()
Run Code Online (Sandbox Code Playgroud)

预期的绘图应该将两个 y 轴都着色,但是,只有右脊柱着色,如下所示。 在此输入图像描述

当放大左侧书脊时,您可以发现 y 轴周围有一个红色阴影,这意味着我的彩色书脊被另一个书脊覆盖了,如何仅通过修改来解决此问题func()

geh*_*eis 3

twinx不仅“成对”y轴脊椎,而且还“成对”所有其他三个脊椎。所以左边的红色脊柱基本上是透支的(就像你在自己的答案中已经认识到的那样)。您可以将其可见性设置color为,而不是将其设置为,与此处的第 18-22 行相比,这似乎是首选方式。Noneset_visible()False

所以:

def func(ax, data, color, position):    # A function for plotting
    ax.plot(data[0], data[1], color=color)
    ax.spines[position].set_color(color)
    for pos in ['left', 'right']:
        if pos != position:
            ax.spines[pos].set_visible(False)
Run Code Online (Sandbox Code Playgroud)