matplotlib的axvspan在散点图中转换标记颜色,但在普通图中不转换

时间:2014-10-15 14:21:11

标签: python-3.x matplotlib

我最近在matplotlib中注意到以下现象(使用v3.3.1和Python3.3):

最小代码示例

import matplotlib.pyplot as plt

plt.plot(range(5),5*[3],'o', color="r", label="plt.plot")
plt.scatter(range(5),5*[2], color="r", label='plt.scatter')

plt.axvspan(1.5,4.5, color='yellow', alpha=0.5)

ax=plt.gca()
ax.legend(loc=6)

plt.savefig('adjusted_colors.png')

产生一个带有部分调整标记颜色的图 - 抱歉无法在此处显示图 - 即使用pyplot的scatter - 在axvspan跨越的区域中绘制的标记。 相反,通过pyplot的plot - 函数绘制的标记颜色不会被转换。

如果使用plt.scatter,有关如何避免标记颜色调整的任何想法plt.plot分别用于绘图,如何将其打开?

1 个答案:

答案 0 :(得分:0)

“调整颜色”的原因并不是因为颜色实际发生了变化,而是因为散射结果(即PathCollection个对象)正在通过半透明的彩色矩形进行查看,因此它是下方。绘图的结果(Line2D对象)也不会发生同样的情况,因为它位于矩形上方

Matplotlib在图中显示艺术家时使用名为zorder的属性(matplotlib图中的大部分内容都是artist)。默认设置将绘图的zorder设置为2,而矩形和散点都具有1的zorder,矩形默认为现有的“更高”(不确定为什么,但它就是这样)。您可以通过指定zorder关键字强制散点位于矩形上方:

 plt.scatter(range(5),5*[2], color="r", label='plt.scatter', zorder=2)

或者,如果您想要相反,请执行相同操作以移动矩形下方的绘图点:

plt.plot(range(5),5*[3],'o', color="r", label="plt.plot", zorder=0)