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

Python Matplotlib绘图x轴显示为0起始值而非分组时间值的咨询

问题根因

你当前绘图代码只向plt.plot()传入了y轴对应的数值(即WTS_summary.values),没有显式指定x轴对应的数据源。这种情况下matplotlib会自动以从0开始的整数序列作为x轴刻度,自然不会显示分组得到的年月值。
另外你在分组时使用的YearMonth是pandas的Period类型,部分matplotlib版本对该类型的直接渲染适配不佳,需要先转换为绘图可识别的格式,避免刻度顺序错位。

具体调整步骤

1. 转换索引为适配绘图的格式

在你生成WTS_summary的代码之后,把存储在WTS_summary索引里的Period类型年月值,转换为matplotlib原生支持的datetime格式:

# 将Period类型的索引转为对应月份第一天的datetime格式
WTS_summary.index = WTS_summary.index.to_timestamp()

这一步可以让matplotlib按照真实的时间逻辑排布刻度,不会出现日期顺序混乱的问题。

2. 绘图时显式指定x、y轴的数据源

修改原本的绘图代码,不再仅传入y值,要把转好格式的年月索引作为x轴传入:

plt.figure()
# x轴为WTS_summary存储的年月索引,y轴为月度均值
plt.plot(
    WTS_summary.index, 
    WTS_summary['Average Temp'], 
    label='WTS Avg Temp', 
    linewidth=1,
    alpha=0.7,
    c='salmon'
)

3. (可选)自定义x轴刻度显示格式

如果自动生成的刻度显示成了2009-03-01这类带具体日期的冗余格式,可以手动调整刻度规则,让它直接显示为2009-03这种简洁的年月格式:

# 导入matplotlib的日期处理模块
import matplotlib.dates as mdates

# 设置x轴主刻度为每月一个标记
plt.gca().xaxis.set_major_locator(mdates.MonthLocator(interval=1))
# 设置刻度标签的显示格式为年-月
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
# 旋转刻度标签避免文字重叠
plt.xticks(rotation=45)
其他便捷实现方案
  • 字符串直传方案:如果不想处理datetime格式的兼容问题,可以直接把年月Period转成字符串类型作为x轴,完全规避格式适配问题:
# 把索引转成"2009-03"格式的字符串
WTS_summary['x_labels'] = WTS_summary.index.astype(str)

plt.figure()
plt.plot(
    WTS_summary['x_labels'],
    WTS_summary['Average Temp'],
    label='WTS Avg Temp',
    linewidth=1,
    alpha=0.7,
    c='salmon'
)

该方案的优点是实现简单、无格式适配问题,x轴会直接显示需要的年月字符串;缺点是如果时间跨度极大,刻度的自动排布灵活性弱于datetime类型的x轴。

  • pandas原生绘图方案:如果偏好和DataFrame联动的绘图逻辑,可以直接调用DataFrame自带的plot接口,该接口会自动把DataFrame的索引识别为x轴,不需要手动指定数据源:
WTS_summary.plot(
    y='Average Temp',
    label='WTS Avg Temp',
    linewidth=1,
    alpha=0.7,
    c='salmon'
)
# 旋转刻度标签避免重叠
plt.xticks(rotation=45)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 07:15:06