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



我最近注意到matplotlib中的以下现象(使用v1.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')

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

关于在使用plt.scatter进行绘图的情况下如何避免标记颜色的调整的任何想法,在使用plt.plot的情况下如何打开它?

"颜色被调整"的原因不是因为颜色实际上发生了变化,而是因为散点结果(这是一个PathCollection对象(是通过它下面的半透明的彩色矩形查看的。 绘图的结果(这是一个Line2D对象(不会发生同样的情况,因为它位于矩形上方

Matplotlib 在图形中显示艺术家时会使用名为 zorder 的属性(大多数存在于 matplotlib 绘图中的所有东西都是艺术家(。 默认值将图的 zorder 设置为 2,而矩形和散点的 zorder 均为 1,矩形默认为现有的"更高"(不确定确切原因,但就是这样(。 您可以通过指定 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)

最新更新