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

Matplotlib设置X轴:显示全部刻度,仅每10个位置显示标签

解决X轴显示全部刻度但仅每10个显示标签的问题

直接通过分开设置刻度位置和刻度标签就能实现需求,同时补充95%置信区间的绘制代码,完整示例如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# 你的初始数据处理部分
df.sort_values(by=["Peak number"], inplace=True)
columns = list(df.iloc[:,2:].columns)
columns = np.asarray(columns, dtype='int')  # 转为整数更贴合编号场景
means = df.iloc[:,2:].mean(axis=0)

# 计算95%置信区间
n = df.shape[0]
stds = df.iloc[:,2:].std(axis=0)
sem = stds / np.sqrt(n)
lower_ci, upper_ci = stats.t.interval(0.95, df=n-1, loc=means, scale=sem)

fig, ax = plt.subplots(figsize=(8, 6))
# 绘制均值线
ax.plot(columns, means, "-", color="0.1", linewidth=1.5, alpha=0.5, label="Mean")
# 绘制95%置信区间填充
ax.fill_between(columns, lower_ci, upper_ci, color="0.1", alpha=0.2, label="95% CI")

# 关键:设置X轴刻度和标签
ax.set_xticks(columns)  # 显示全部1-153的刻度线
# 仅对每10个编号显示标签,其余留空
ax.set_xticklabels([str(num) if num % 10 == 0 else "" for num in columns])

ax.set_xlabel('Peak number')
ax.set_ylabel('Mean ratio')
ax.legend()
plt.tight_layout()  # 自动调整布局,避免标签被截断
plt.show()

核心逻辑说明:

  1. 显示全部刻度:用ax.set_xticks(columns)指定所有需要显示刻度线的位置,确保1到153每个编号都有对应的刻度线。
  2. 控制标签显示:通过列表推导式生成标签列表,仅对能被10整除的编号保留文本,其余设为空字符串,再用ax.set_xticklabels应用,实现"有刻度线但无标签"的效果。
  3. 补充的置信区间计算使用t分布(适用于小样本场景),如果是大样本也可以用正态分布近似替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:22:48