Stem Plot标记被轴截断求助:如何在不扩展X轴时显示完整标记
解决Stem图x=0处标记被截断的问题
问题分析
你设置了ax.set_xlim(0, 6.5)后,x=0位置的标记被绘图区域左边界截断,但又不想让X轴延伸到0左侧。之前调整spine的clip_on属性没用,是因为stem图的标记有独立的裁剪设置,不受spine参数影响。
解决方案
调用ax.stem()时会返回三个对象:茎线、标记、基线。我们只需要单独获取标记对象,把它的clip_on设为False,就能让x=0处的标记完整显示,同时保留X轴的范围设置。
修改后的完整代码:
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 6, 7) y = np.ones(7) fig, ax = plt.subplots(figsize=(3, 1.8)) ax.spines[["left", "bottom"]].set_position(("data", 0)) ax.spines[["top", "right"]].set_visible(False) ax.spines['bottom'].set_color('gray') ax.spines['left'].set_color('gray') ax.tick_params(left=False, bottom=False) for k, spine in ax.spines.items(): spine.set_clip_on(True) # 获取stem返回的标记对象,关闭裁剪 stem_lines, stem_markers, stem_base = ax.stem(x, y, 'black', markerfmt='ko', basefmt=' ') stem_markers.set_clip_on(False) # 关键代码:让标记不受绘图边界限制 ax.set_ylim(0, 1.15) ax.set_xlim(0, 6.5) plt.show()
原理说明
ax.stem()返回的stem_markers是PathCollection类型,默认会继承轴的裁剪规则,设置clip_on=False后,标记就不会被绘图区域的边界截断了。- 这样既保留了
ax.set_xlim(0, 6.5)的设置(不让X轴延伸到0左侧),又能完整显示x=0处的标记。
内容的提问来源于stack exchange,提问作者ufuk ertenli
相关产品推荐
相关产品推荐

