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

如何将Matplotlib子图X轴的天数标签替换为年份自定义标签?

解决Matplotlib子图X轴天数转年份刻度的问题

问题核心

你直接设置ticks为np.arange(0,15,1)无效,是因为X轴原始数据是天数值(比如第364天对应第1年),刻度位置必须匹配实际的天数坐标,再替换标签为年份才行。

修改后的完整代码

import matplotlib.pyplot as plt
import numpy as np

# 假设count系列变量、days数组已提前定义
fig, axes = plt.subplots(nrows=3, ncols=2, figsize=(25, 17))

titles = ['S', 'L', 'D', 'B', 'D_0', 'B_0']
counts = [countS, countL, countD, countB, countD_0, countB_0]  # 用列表替代冗余的if-elif判断

# 定义年份对应的天数位置和年份标签
year_positions = np.arange(0, 365*15, 365)  # 每年第一天的天数坐标(若days从1开始,改为np.arange(1, 365*15+1, 365))
year_labels = np.arange(0, 15, 1)

for i, ax in enumerate(axes.flat):
    y = counts[i]
    ax.plot(days, y, color='m')

    ax.set_title(titles[i])
    ax.set_xlabel('Год')  # 更新X轴标签为年份
    ax.set_ylabel('Количество')
    ax.set_facecolor('#f4f4f4')
    ax.grid(color='white')

    # 核心:设置刻度位置为对应天数,替换标签为年份
    ax.set_xticks(year_positions)
    ax.set_xticklabels(year_labels)

    ax.tick_params('x', labelrotation=45)

fig.suptitle('Динамика заболеваемости', fontsize=20)
fig.tight_layout()
plt.subplots_adjust(wspace=0.1, hspace=0.4)
plt.show()

关键调整说明

  • 简化数据调用:把原来的6个if-elif判断改成列表索引,代码更简洁易维护。
  • 匹配刻度位置:year_positions对应每年的天数坐标,确保刻度点落在数据的年份分界处。
  • 替换刻度标签:用set_xticklabels把天数位置的显示文本换成0-14的年份数值。
  • 更新轴标签:把X轴原标签"Дни"改为"Год",和显示内容匹配。

注意事项

如果你的days数组是从1开始计数(比如days = np.arange(1, 365*15+1)),需要同步调整year_positions的起始值为1,保证刻度位置和实际天数对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:02:40