Matplotlib时间序列图X轴日期拥挤,如何仅显示年份优化轴标签?
解决时间序列图X轴日期拥挤:仅显示年份刻度
你的时间序列索引包含月份(YYYY-MM格式),直接绘图会生成过多刻度导致X轴拥挤模糊。以下是两种可行解决方案:
方案1:保留原始数据,调整X轴刻度格式
无需修改数据,通过Matplotlib的日期工具设置仅显示年份刻度:
import matplotlib.pyplot as plt import matplotlib.dates as mdates df = pca_function(sd_Data) fig, ax = plt.subplots(2, 1) # 绘制直方图 ax[0].hist(df['comp_0']) ax[0].set_ylabel('Frequency') # 绘制时间序列 ax[1].plot(df.index, df['comp_0']) ax[1].set_xlabel('Years') # 配置X轴年份刻度 # 每年生成一个主刻度,可通过base=5改为每5年显示一次 ax[1].xaxis.set_major_locator(mdates.YearLocator()) # 将刻度格式化为4位年份 ax[1].xaxis.set_major_formatter(mdates.DateFormatter('%Y')) # 旋转标签避免重叠,同时缩小字号优化显示 ax[1].tick_params(axis='x', rotation=45, labelsize=8) fig.suptitle('Histogram and Time series of Plot Factor') plt.tight_layout() # fig.savefig('factor1959.pdf')
关键说明
mdates.YearLocator():控制刻度生成频率,默认每年一个刻度,按需调整base参数可减少刻度数量mdates.DateFormatter('%Y'):将日期格式转为纯4位年份,去除月份信息tick_params:调整标签角度和字号,进一步提升可读性
方案2:按年份聚合数据(简化绘图)
如果不需要保留月度细节,可先对数据按年份聚合(如取均值、中位数),再绘制年度时间序列:
import matplotlib.pyplot as plt df = pca_function(sd_Data) # 按年份重采样,计算年均值(可替换为sum/median等其他聚合方式) yearly_data = df.resample('Y').mean() fig, ax = plt.subplots(2, 1) ax[0].hist(df['comp_0']) ax[0].set_ylabel('Frequency') # 绘制年度聚合后的时间序列 ax[1].plot(yearly_data.index.year, yearly_data['comp_0']) ax[1].set_xlabel('Years') # 设置X轴刻度为所有年份 ax[1].set_xticks(yearly_data.index.year) ax[1].tick_params(axis='x', rotation=45, labelsize=8) fig.suptitle('Histogram and Time series of Plot Factor') plt.tight_layout()
内容的提问来源于stack exchange,提问作者Moe
相关产品推荐
相关产品推荐

