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

如何用Matplotlib绘制按loc_source&loc_target分组的count-day折线图?

高效绘制DataFrameGroupBy多折线图的Matplotlib方案

嘿,我完全理解你不想用逐行迭代这种麻烦方式的心情——其实用pandas配合Matplotlib有非常优雅的解决方案,根本不需要手动循环每个位置组合!下面我就给你一步步演示最优的实现方法:

第一步:准备与整理数据

首先我们先把你的示例数据转换成DataFrame(如果你的数据源已经是DataFrameGroupBy,只需要先把它转换成完整的DataFrame即可,比如用grouped.apply(lambda x: x).reset_index(drop=True)):

import pandas as pd
import matplotlib.pyplot as plt

# 你的单日示例数据
data = {
    'day': [1.566691e+09]*6,
    'loc_source': ['east', 'east', 'unknown', 'unknown', 'west', 'west'],
    'loc_target': ['east', 'west', 'east', 'west', 'east', 'west'],
    'count': [1768, 559, 73, 160, 53, 1563]
}
df = pd.DataFrame(data)

接下来是核心:把数据转换成宽格式,让每个loc_source-loc_target组合成为单独的列,行对应日期(day)。这里用pivot方法就能一键完成:

# 透视数据,将位置组合转为列,行是日期
pivot_df = df.pivot(index='day', columns=['loc_source', 'loc_target'], values='count')
# 把多层列名合并成易读的字符串(比如"east-east"),方便图例显示
pivot_df.columns = ['-'.join(col) for col in pivot_df.columns.values]

第二步:绘制多折线图

现在只需要调用pandas的plot方法,Matplotlib会自动为每一列(也就是每个位置组合)绘制一条折线,完全不用手动循环:

# 创建画布
plt.figure(figsize=(10, 6))
# 绘制折线图,指定用当前的Axes对象
pivot_df.plot(kind='line', ax=plt.gca())

# 设置图表细节(按你的需求调整)
plt.ylabel('count')
plt.xlabel('day')
plt.ylim(0, 2000)  # 纵轴范围设为0-2000
plt.title('Daily Traffic Count by Source-Target Location')
plt.legend(title='Location Pair')  # 设置图例标题
plt.tight_layout()  # 自动调整布局,避免标签被截断
plt.show()

为什么这是最优方案?

  • 完全避免了逐行迭代,代码简洁易维护
  • 当你扩展到数年数据时,只要day列有多个时间戳,折线会自动延伸,不需要修改核心逻辑
  • pandas会自动处理所有loc_source和loc_target的唯一组合,哪怕后续新增了新的位置对,代码也能自动适配
  • 如果觉得时间戳横轴不够友好,可以把day转换成日期格式:df['day'] = pd.to_datetime(df['day'], unit='s'),这样横轴会显示可读性更强的日期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:27:10