如何基于Pandas分组结果绘制分类折线图?
解决方法:分组后绘制分类折线图
没问题,我来帮你实现这个需求!要画出分类A、B各自随月份变化的折线图,核心是先把分组后的结果转换成适合可视化的结构,然后用pandas或matplotlib来绘制就行,下面分两种常用方法说明:
方法一:用pandas内置绘图(快速简洁)
首先,你已经通过groupby得到了多级索引的统计结果,我们可以用unstack()把Category从索引转成列,这样每个分类就是单独的一列,月份作为X轴索引,直接调用plot()就能生成折线图:
import pandas as pd import matplotlib.pyplot as plt # 你的原始数据 data = { 'Month': [3,3,3,4,4,4], 'Category': ['A','A','B','A','B','B'], 'Quantity': [1,1,1,1,1,1] } df = pd.DataFrame(data) # 分组统计 grouped = df.groupby(['Month','Category'])['Quantity'].count() # 转换为宽格式DataFrame(Category为列) df_plot = grouped.unstack(level='Category') # 绘制折线图 df_plot.plot(kind='line', marker='o', figsize=(8,5)) plt.title('Monthly Transaction Count by Category') plt.xlabel('Month') plt.ylabel('Number of Transactions') plt.legend(title='Category') plt.show()
这段代码会自动为A、B生成不同颜色的折线,标记点用圆圈显示,图例和坐标轴标签也会自动配置好。
方法二:用matplotlib手动绘制(更灵活自定义)
如果你需要更精细的控制(比如自定义颜色、线条样式),可以把分组结果转成长格式DataFrame,然后按分类循环绘制:
import pandas as pd import matplotlib.pyplot as plt # 原始数据和分组统计同上 grouped_df = grouped.reset_index(name='Count') # 把多级索引转成普通列,统计值命名为Count # 创建画布 plt.figure(figsize=(8,5)) # 遍历每个分类,绘制折线 for category, subset in grouped_df.groupby('Category'): plt.plot(subset['Month'], subset['Count'], marker='s', linestyle='--', label=category) # 添加图表元素 plt.title('Monthly Transaction Count by Category') plt.xlabel('Month') plt.ylabel('Number of Transactions') plt.legend(title='Category') plt.xticks([3,4]) # 固定X轴显示3、4两个月份 plt.grid(alpha=0.3) # 添加网格线 plt.show()
这种方法可以自由调整每个分类的线条样式、标记形状,适合需要定制化图表的场景。
关键说明
- 原始
groupby的结果是多级索引Series,直接画图无法区分A、B两条线,所以必须通过unstack()转宽格式,或者reset_index()转长格式,让数据结构适配可视化需求。 - 两种方法都能实现你的需求,第一种适合快速出图,第二种适合深度定制。
内容的提问来源于stack exchange,提问作者Homesand
相关产品推荐
相关产品推荐

