You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:33:17