如何移除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
相关产品推荐
相关产品推荐

