Python绘图层级问题:如何让散点图显示在直方图上层?
解决Matplotlib散点图被直方图遮挡的问题
嘿,这个问题其实挺常见的——Matplotlib默认是按你绘图的先后顺序来决定图层层级的,后绘制的元素会覆盖先绘制的。你现在先画了散点图再画直方图,自然直方图的柱体就压在散点上面了。给你几个简单靠谱的解决办法:
方法1:调整绘图顺序(最直接)
把直方图的代码放到散点图前面,让散点图最后绘制,这样它就会自动处于最上层:
plt.figure(1) # 先绘制直方图 plt.hist(x, bins=100, normed=True) # 再绘制散点图 plt.scatter(x, y, c='r') plt.show()
原理很简单:Matplotlib的图层是“栈”式结构,后加入的元素在栈顶,自然不会被之前的元素遮挡。
方法2:用zorder参数强制设置层级
如果不想调整代码顺序,直接给散点图设置一个更高的zorder值就行。Matplotlib里元素的zorder数值越大,层级越靠前。直方图的柱体默认zorder是1,散点默认是2,但如果还是被遮挡(比如坐标轴范围重叠导致的视觉遮挡),可以手动给散点设一个更大的值:
plt.figure(1) plt.scatter(x, y, c='r', zorder=10) # 给散点设置更高的层级优先级 plt.hist(x, bins=100, normed=True) plt.show()
这个方法灵活度更高,哪怕之后添加其他绘图元素,也可以通过调整zorder来控制谁在最前面。
小提示
如果你的图表涉及双Y轴或者更多复杂元素,也可以通过ax.set_zorder()来调整坐标轴的层级,但你的场景用上面两种方法就完全足够啦。
内容的提问来源于stack exchange,提问作者Chi
相关产品推荐
相关产品推荐

