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()
核心逻辑说明:
- 显示全部刻度:用
ax.set_xticks(columns)指定所有需要显示刻度线的位置,确保1到153每个编号都有对应的刻度线。 - 控制标签显示:通过列表推导式生成标签列表,仅对能被10整除的编号保留文本,其余设为空字符串,再用
ax.set_xticklabels应用,实现"有刻度线但无标签"的效果。 - 补充的置信区间计算使用
t分布(适用于小样本场景),如果是大样本也可以用正态分布近似替换。
内容的提问来源于stack exchange,提问作者user22037973
相关产品推荐
相关产品推荐

