如何用Pandas plot()分组将多条曲线绘制在同一图表中
如何将Pandas分组绘制的多条曲线合并到同一图表中?
问题场景
现有包含3组店铺销售数据的CSV文件,每组数据对应一条待绘制的曲线。使用Pandas的plot()方法按shop字段分组绘图时,生成了3个独立图表,需要将3条曲线展示在同一个图表中。
原始CSV数据
shop,timestamp,sales north,2023-01-01,235 north,2023-01-02,147 north,2023-01-03,387 north,2023-01-04,367 north,2023-01-05,197 south,2023-01-01,235 south,2023-01-02,98 south,2023-01-03,435 south,2023-01-04,246 south,2023-01-05,273 east,2023-01-01,197 east,2023-01-02,389 east,2023-01-03,87 east,2023-01-04,179 east,2023-01-05,298
原测试代码(生成独立图表)
import pandas as pd csv = pd.read_csv('./tmp/sample.csv') csv.timestamp = pd.to_datetime(csv.timestamp) # 此代码会生成3个独立图表 csv.plot(x='timestamp', by='shop')
解决方案
方法1:数据透视后直接绘图
通过pivot()将数据重构为宽表格式,让不同店铺的销售数据对应同一时间戳的列,再调用plot()即可自动将所有曲线绘制在同一图表。
import pandas as pd csv = pd.read_csv('./tmp/sample.csv') csv.timestamp = pd.to_datetime(csv.timestamp) # 透视重构数据:timestamp为索引,shop为列,sales为值 pivoted_df = csv.pivot(index='timestamp', columns='shop', values='sales') # 绘制合并曲线,自动生成图例 pivoted_df.plot()
方法2:手动指定绘图轴
创建matplotlib轴对象,循环遍历分组数据,将每条曲线绘制到同一轴上。
import pandas as pd import matplotlib.pyplot as plt csv = pd.read_csv('./tmp/sample.csv') csv.timestamp = pd.to_datetime(csv.timestamp) # 创建单个图表轴对象 fig, ax = plt.subplots() # 按shop分组,逐个绘制曲线到同一轴 for shop_name, group_data in csv.groupby('shop'): group_data.plot(x='timestamp', y='sales', ax=ax, label=shop_name) # 显示图表 plt.show()
内容的提问来源于stack exchange,提问作者Florent Georges
相关产品推荐
相关产品推荐

