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

Matplotlib绘制30年月度PMI折线图呈方块状的问题与优化

问题分析与解决方法

核心原因:不是格式问题,是数据未按时间排序

你看到的“方块状”折线,本质是Date列未按时间顺序排列。Matplotlib会严格按照数据框里的行顺序连接每个数据点,当日期乱序时,折线会在早、晚日期之间反复跳转,形成尖锐的块状线条,而非数据未完整呈现。

解决步骤

1. 先对数据按日期排序(必做)

先将数据框按Date列升序排列,确保数据点按时间顺序连接:

# 生成排序后的新数据框(推荐,不修改原数据)
pmi_sorted = pmi.sort_values('Date')

# 或者直接修改原数据框
# pmi.sort_values('Date', inplace=True)

然后用排序后的数据绘图:

plt.plot(pmi_sorted.Date, pmi_sorted.PMI, c='mediumblue', lw=0.8)
plt.show()

排序后折线会恢复正常的时间趋势,不再出现方块状。

2. 可选:生成平滑折线(视觉优化)

如果想要更平滑的视觉效果(月度数据本身是离散观测,平滑仅为美化),可以用插值方法生成连续曲线:

import numpy as np
from scipy.interpolate import make_interp_spline
from datetime import datetime

# 先执行第一步的排序
pmi_sorted = pmi.sort_values('Date')

# 将日期转换为Matplotlib可处理的数值格式
x_num = pmi_sorted.Date.apply(lambda x: x.toordinal())
# 创建三次样条插值函数
spline = make_interp_spline(x_num, pmi_sorted.PMI, k=3)
# 生成更多的时间点用于绘制平滑曲线
x_smooth = np.linspace(x_num.min(), x_num.max(), 1000)
# 计算平滑后的PMI值
y_smooth = spline(x_smooth)
# 将数值转回日期格式
date_smooth = [datetime.fromordinal(int(x)) for x in x_smooth]

# 绘制平滑曲线
plt.plot(date_smooth, y_smooth, c='mediumblue', lw=0.8)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:35:18