Matplotlib绘图时时间分段x轴数据莫名偏移0.5问题求助
问题原因
你观察到的x轴偏移本质是线端点样式和线宽设置导致的视觉效果,你的原始x坐标本身是完全准确的:
- 可以通过添加
plt.scatter([2,6], [1,1], c='black', zorder=10)验证,会看到点刚好落在x=2和x=6的位置,和你设置的坐标完全一致 - 你用
plt.plot绘制水平线段时,matplotlib默认的线端点样式为projecting,会在线段的两个端点沿线段走向额外延伸半个线宽的长度 - 你设置了
linewidth=20,结合你当前图表的尺寸与dpi设置,半个线宽的像素长度刚好对应x轴的0.5单位,所以看起来整段线段左右都各向外扩了0.5,就像整体偏移了0.5
解决方法
方法1:修改线端点样式
在plt.plot调用时添加solid_capstyle='butt'参数,关闭端点延伸效果即可:
for i,j,z in zip(a_segs,y1,a_clr): plt.plot(i,j,color=z,linewidth=20, solid_capstyle='butt')
修改后线段端点就会严格对齐你设置的x坐标值。
方法2:使用更适配的绘图API
如果你的需求是绘制分段色块,更推荐用plt.hlines或者矩形补丁matplotlib.patches.Rectangle实现,坐标控制更精准,不会受线宽参数的副作用影响:
# 用hlines实现的示例 for seg, color in zip(a, a_clr): plt.hlines(y=1, xmin=seg[0], xmax=seg[1], color=color, linewidth=20)
内容的提问来源于stack exchange,提问作者WOT
相关产品推荐
相关产品推荐

