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

如何用Matplotlib按正确顺序绘制月度事件计数折线图?

按1-12月顺序绘制月度计数折线图

问题场景

你有如下Pandas DataFrame,其中Month列记录的是无序的月度事件计数:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.DataFrame({'Month': [5, 6, 8, 9, 1, 2, 3, 4, 7, 10, 11, 12], 'Count': [3, 1, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0]})

直接使用原有绘图代码时,折线会按照Month列的原始顺序连接,无法呈现1-12月的自然时序:

fig, ax = plt.subplots(1,1)
ax.grid(color='gray', linestyle='-', linewidth=0.1)
plt.setp(ax, xticks=np.arange(1, 13, step=1))
ax.plot(df.Month, df.Count, marker='o')

解决方案

方法1:先对DataFrame按月份排序

通过sort_values()方法将DataFrame按Month列升序排列,再基于排序后的数据集绘图:

# 按Month列升序排序
df_sorted = df.sort_values('Month')

# 绘制时序折线图
fig, ax = plt.subplots(1,1)
ax.grid(color='gray', linestyle='-', linewidth=0.1)
plt.setp(ax, xticks=np.arange(1, 13, step=1))
ax.plot(df_sorted.Month, df_sorted.Count, marker='o')
plt.show()

方法2:重新索引确保完整月份序列(适用于可能缺失月份的场景)

如果数据集可能存在缺失月份的情况,可以将Month设为索引后,重新索引到1-12月,缺失月份自动填充0值,再绘图:

# 将Month列设置为索引
df.set_index('Month', inplace=True)
# 重新索引到1-12月,缺失月份填充0
df_reindexed = df.reindex(range(1,13), fill_value=0)

# 绘制折线图
fig, ax = plt.subplots(1,1)
ax.grid(color='gray', linestyle='-', linewidth=0.1)
plt.setp(ax, xticks=np.arange(1, 13, step=1))
ax.plot(df_reindexed.index, df_reindexed.Count, marker='o')
plt.show()

两种方法均能让折线按照1-12月的自然顺序连接,满足时序可视化需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:35:26