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

如何移除matplotlib绘图中指定刻度标签并保留刻度?代码异常解决

解决Matplotlib保留刻度但仅显示首尾标签的问题

问题根源

直接修改ax.get_xticklabels()返回的Text对象后传入set_xticklabels的方式不可靠——Matplotlib的Text对象与刻度的绑定逻辑并非简单修改文本就生效,反而会导致所有标签失效。

正确实现代码

方案1:仅保留首尾标签

通过生成标签列表,只保留第一个和最后一个标签文本,其余设为空字符串:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(1, 1)
ax.plot(np.arange(10))

# 获取刻度位置与对应标签文本
locs = ax.get_xticks()
labels = [label.get_text() if i in (0, len(locs)-1) else '' for i, label in enumerate(ax.get_xticklabels())]

# 重新设置刻度与标签
ax.set_xticks(locs)
ax.set_xticklabels(labels)

plt.show()

方案2:指定保留特定刻度标签(如0和8)

根据刻度值精准筛选需要显示的标签:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(1, 1)
ax.plot(np.arange(10))

locs = ax.get_xticks()
# 仅保留刻度值为0和8的标签,其余设为空
labels = [str(loc) if loc in (0, 8) else '' for loc in locs]

ax.set_xticks(locs)
ax.set_xticklabels(labels)

plt.show()

方案3:直接修改标签可见性(更高效)

无需重新设置刻度,直接控制标签的显示状态:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(1, 1)
ax.plot(np.arange(10))

# 遍历标签,仅显示第一个和最后一个
all_labels = ax.get_xticklabels()
for i, label in enumerate(all_labels):
    if i not in (0, len(all_labels)-1):
        label.set_visible(False)

plt.show()

内容的提问来源于stack exchange,提问作者Adriaan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:35:22