子图的Matplotlib get_color

9
我正在按照这个教程进行学习: https://matplotlib.org/gallery/ticks_and_spines/multiple_yaxis_with_spines.html
但是,该示例仅适用于单个图表,而我目前正在处理子图。 我的版本如下:
    p1 = tr[names['equity']].plot(ax=ax3, linewidth = 0.75)
    axb = ax3.twinx()
    axb.spines["right"].set_position(("axes", 0.5))
    p2 = tr[names[local_rating]].plot(ax=axb, c= 'r', linewidth = 0.75)
    axb.grid(False)
    axb.margins(x=0)
    axc = ax3.twinx()    
    p3 = tr[names['vol']].plot(ax=axc, c = 'g', linewidth = 0.75)
    axc.grid(False)
    axc.margins(x=0)
    ax3.yaxis.label.set_color(p1.get_color())
    axb.yaxis.label.set_color(p2.get_color())
    axc.yaxis.label.set_color(p3.get_color())

当我尝试执行pX.get_color()时,出现以下错误:

AttributeError: 'AxesSubplot'对象没有属性'get_color'

我的问题是:我应该使用哪种方法来恢复子图的颜色?

我知道我可以手动设置颜色以匹配,因为这只需要很少的指令,但我想知道是否还有其他方法。

谢谢


1
我正在使用 ax.bar 进行工作,并想要获取最新的颜色。以下是我解决这个问题的方法,以防其他人遇到相同的问题:bars = ax.bar(x, height)c = bars.patches[-1].get_facecolor() - Johann
1个回答

14

这与子图无关。您使用了pandas的绘图函数,而不是像例子中一样使用matplotlib的plot函数。

确实,轴本身没有颜色。如果您想要查看轴内线条的颜色,可以使用例如:

ax.get_lines()[0].get_color()

获取坐标轴ax中第一行的颜色。


你说得对,现在改成axX.get_lines()[0].get_color()就可以正常工作了,谢谢! - Yuca
1
如果您不断添加行并想获取最后一行的颜色,请使用:ax.lines[-1].get_color() - Maximilian Mordig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接