如何修改datetime类型的x轴刻度标签使其仅显示日期天数?
方案1:使用Matplotlib日期格式化器修改显示格式
这种方法不需要改动原有数据,仅修改x轴刻度的展示规则:
- 首先导入
matplotlib.dates模块 - 在绘图代码中添加x轴格式化配置,使用
%d作为格式符即可仅提取日期中的天数,且自动补零为两位格式
修改后的完整代码如下:
import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates # 新增导入 PVA_temp = pd.read_excel(r'Downloads/PVAtemp.xlsx') PVA_temp = PVA_temp.drop(index = 0) PVA_temp = PVA_temp.drop(labels = 'Unnamed: 2', axis = 1) PVA_temp = PVA_temp.drop(labels = 'Unnamed: 4', axis = 1) PVA_temp['Time'] = pd.to_datetime(PVA_temp['Time']) PVA_temp = PVA_temp.set_index('Time').resample('8H').first() PVA_temp = PVA_temp.dropna() fig = plt.figure(1, figsize = (5,5)) plt.plot(PVA_temp.index, PVA_temp['Unnamed: 3'], c = 'blue') # 新增x轴格式配置 ax = plt.gca() ax.xaxis.set_major_formatter(mdates.DateFormatter('%d')) # 仅显示天数,两位补零 plt.minorticks_on() plt.tick_params(which = 'minor', direction = 'in') plt.tick_params(which = 'major', direction = 'in') plt.xticks(rotation=45) plt.xlabel("Days") plt.ylabel("Temperature (°C)") plt.show()
注意:该方案会保留原日期中的实际天数,如果你需要按数据采集顺序从01开始计数,和原日期的日号无关,请用方案2
方案2:预处理x轴为采集天数序列
直接计算每条数据对应的采集天数,以第一条数据为第1天,完全脱离原日期的月年信息:
import pandas as pd import matplotlib.pyplot as plt PVA_temp = pd.read_excel(r'Downloads/PVAtemp.xlsx') PVA_temp = PVA_temp.drop(index = 0) PVA_temp = PVA_temp.drop(labels = 'Unnamed: 2', axis = 1) PVA_temp = PVA_temp.drop(labels = 'Unnamed: 4', axis = 1) PVA_temp['Time'] = pd.to_datetime(PVA_temp['Time']) PVA_temp = PVA_temp.set_index('Time').resample('8H').first() PVA_temp = PVA_temp.dropna() # 新增:计算采集天数,从01开始 PVA_temp['days'] = (PVA_temp.index - PVA_temp.index.min()).days + 1 fig = plt.figure(1, figsize = (5,5)) # x轴改用计算好的天数 plt.plot(PVA_temp['days'], PVA_temp['Unnamed: 3'], c = 'blue') plt.minorticks_on() plt.tick_params(which = 'minor', direction = 'in') plt.tick_params(which = 'major', direction = 'in') plt.xticks(rotation=45) plt.xlabel("Days") plt.ylabel("Temperature (°C)") plt.show()
如果需要强制显示两位的天数标签(如01而非1),可以额外添加一行格式配置:
ax = plt.gca() ax.xaxis.set_major_formatter('{x:02.0f}')
内容的提问来源于stack exchange,提问作者Caden Myers
相关产品推荐
相关产品推荐

