如何在Matplotlib中将标记绘制于误差棒上方?
解决Matplotlib误差棒覆盖标记的问题
问题原因
Matplotlib中errorbar的默认显示层级(zorder)高于scatter,即便后调用scatter,标记也会被误差棒线条覆盖,导致视觉效果不佳。
解决办法
方法一:直接在errorbar中配置标记(推荐)
无需单独调用scatter,直接在errorbar函数内设置标记样式、尺寸和颜色,标记会自动处于误差棒上层,代码更简洁:
import matplotlib.pyplot as plt import numpy as np x=[1,2,3] y=[1,2,3] yerr=[2,3,1] fig,(ax1)=plt.subplots(1,1) ax1.errorbar(x, y, yerr=yerr, linestyle='-', capsize=3, ecolor='lightblue', elinewidth=2, marker='o', markersize=5, mfc='#1f77b4', mec='#1f77b4') plt.show()
注:markersize对应标记的直径,和scatter的s(面积)转换关系为:markersize = 2 * np.sqrt(s / np.pi),示例中markersize=5和原代码s=20的视觉尺寸接近。
方法二:给scatter设置更高的zorder
如果需要保留scatter的调用方式,只需给scatter添加zorder参数并设置为大于2的值(errorbar默认zorder为2),即可让标记显示在误差棒上层:
import matplotlib.pyplot as plt import numpy as np x=[1,2,3] y=[1,2,3] yerr=[2,3,1] fig,(ax1)=plt.subplots(1,1) ax1.errorbar(x,y,yerr=yerr, linestyle='-', capsize=3, ecolor='lightblue', elinewidth=2) ax1.scatter(x, y, s=[20]*len(x), marker='o', color='#1f77b4', zorder=3) plt.show()
内容的提问来源于stack exchange,提问作者f. c.
相关产品推荐
相关产品推荐

