我最近在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
分别用于绘图,如何将其打开?
答案 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)