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

如何用Pandas和Matplotlib基于分组子集绘制多折线图

别担心,我来帮你搞定这个折线图的问题!要实现以日期为X轴、每个Borough单独折线展示在同一图表的效果,咱们可以按以下步骤操作,我会结合示例代码详细说明:

1. 先把日期列转成 datetime 类型

这是最容易踩坑的一步!如果你的日期列还是字符串格式,Matplotlib没法正确识别日期的顺序,画出来的折线会乱掉。假设你的数据框叫df,日期列名为date,执行这段代码:

import pandas as pd
import matplotlib.pyplot as plt

# 转换日期列格式
df['date'] = pd.to_datetime(df['date'])
# 可以用这个命令验证转换是否成功:print(df['date'].dtype),输出应该是datetime64[ns]
2. 整理数据(两种可选方式)

方式一:用pivot转成宽格式(推荐,代码更简洁)

把Borough作为列名,日期作为索引,你要展示的数值指标(比如叫metric_value)作为单元格值,这样Pandas可以直接帮你批量绘图:

# 假设你要展示的数值列是metric_value
df_pivot = df.pivot(index='date', columns='Borough', values='metric_value')

转完之后,数据结构会变成:每一行是一个日期,每一列对应一个Borough的指标值。

方式二:按Borough分组(适合需要自定义折线样式的场景)

如果不想转换数据格式,也可以直接对原始数据按Borough分组,之后逐个绘制折线。

3. 绘制折线图

方法一:用Pandas内置plot方法(简单高效)

如果用了上面的宽格式数据,一行代码就能生成基础图表,Pandas会自动处理图例、日期轴格式化:

df_pivot.plot(kind='line', figsize=(12, 6))
plt.title('Borough Metrics Over Time')
plt.xlabel('Date')
plt.ylabel('Metric Value')
plt.legend(title='Borough')
plt.show()

方法二:手动用Matplotlib循环绘制(更灵活)

如果需要自定义每个折线的颜色、标记样式,或者添加更多个性化元素,可以用这种方式:

plt.figure(figsize=(12, 6))

# 按Borough分组,逐个绘制折线
for borough, group_data in df.groupby('Borough'):
    # 一定要先按日期排序,保证折线顺序正确
    sorted_group = group_data.sort_values('date')
    # 这里可以自定义颜色、标记,比如color='red', marker='o'
    plt.plot(sorted_group['date'], sorted_group['metric_value'], label=borough)

# 添加图表元素
plt.title('Borough Metrics Over Time')
plt.xlabel('Date')
plt.ylabel('Metric Value')
plt.legend(title='Borough')
# 旋转X轴日期标签,避免重叠
plt.xticks(rotation=45)
# 自动调整布局,防止标签被截断
plt.tight_layout()
plt.show()
常见问题排查
  • 如果折线顺序混乱:检查日期列是否真的转成了datetime类型,或者分组后是否按日期排序
  • 如果某些Borough的折线没显示:检查该Borough是否有有效数据,有没有缺失值,可以用df[df['Borough'] == '目标区'].isna().sum()查看
  • 如果图表不弹出:脚本里必须调用plt.show(),Jupyter Notebook中可以省略,但脚本模式下一定要加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:37:43