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

