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

如何在matplotlib绘图中为仅12个数据点的X轴显示月份标签

你之前的代码失效的核心原因是X轴的数值语义不匹配:

  • 365个数据点时,X轴的0~364值刚好对应以天为单位的Unix时间戳的一整年跨度,MonthLocator可以识别到12个自然月的位置,因此可以正常渲染标签
  • 改为12个数据点时,X轴的0~11仅对应11天的时间跨度,MonthLocator在这么短的时间范围内无法匹配到12个月份,因此显示异常

修改后的完整代码(保留日期模块逻辑)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime

# 生成12个月度数据
y = np.random.normal(size=12)
# 核心修改:为每个数据点指定对应的月份日期(可任选任意年份,不影响月份名称显示)
x = [datetime(2023, month, 1) for month in range(1, 13)]

plt.plot(x, y)
plt.xlabel('Month')

locator = mdates.MonthLocator()
fmt = mdates.DateFormatter('%b')
X = plt.gca().xaxis
X.set_major_locator(locator)
X.set_major_formatter(fmt)

# 可选优化:旋转标签避免重叠,调整布局防止标签被截断
plt.xticks(rotation=30)
plt.tight_layout()

plt.show()

轻量化替代方案(无需调用日期模块)

如果你不需要用到日期模块的其他扩展功能,可以直接手动指定刻度标签,实现效果完全一致:

import numpy as np
import matplotlib.pyplot as plt

y = np.random.normal(size=12)
x = np.arange(12)
month_labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

plt.plot(x, y)
plt.xlabel('Month')
plt.xticks(x, month_labels, rotation=30)
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:36:04