如何用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
相关产品推荐
相关产品推荐

