我最近注意到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)