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

如何用Plotly绘制Pandas三层分组后的污染物排放折线图

问题描述

我是社区新用户,同时也是Pandas和Plotly的初学者。我有20个州、5年时间里13种污染物的排放数据,各州按CAV_adoption(清洁空气车辆普及率)分为"Top"或"Bottom"两类。我需要为每种污染物绘制折线图:以Year为X轴,Total Emmisions为Y轴,用颜色区分CAV_adoption类别。

目前通过三层groupby得到了平均排放数据,但不清楚如何提取数据用于Plotly绘图,希望先将分组结果转换为常规DataFrame,再完成绘图。


解决方案

1. 将分组结果转换为常规DataFrame

使用reset_index()可以直接把多层索引的分组结果展开为带完整列的DataFrame,完全匹配你想要的格式:

# 把分组后的多层索引数据转为常规DataFrame
avg_em_df = avg_em_by_CAV.reset_index()
# 修正列名拼写(可选,根据你的需求调整)
avg_em_df.rename(columns={"Total Emmisions": "Total Emissions"}, inplace=True)

2. 绘制单污染物折线图(以CO₂为例)

用Plotly Express可以快速实现需求,代码逻辑直观:

import plotly.express as px

# 筛选二氧化碳的数据
co2_data = avg_em_df[avg_em_df["Pollutant"] == "Carbon Dioxide"]

# 生成折线图
fig = px.line(
    co2_data,
    x="Year",
    y="Total Emissions",
    color="CAV_adoption",  # 用颜色区分CAV类别
    title="Carbon Dioxide Average Emissions by CAV Adoption Level",
    labels={"Total Emissions": "Average Total Emissions (Tons)"},
    markers=True  # 添加数据点,提升可读性
)

# 显示图表
fig.show()

3. 批量生成所有污染物的折线图

如果要自动为13种污染物都生成图表,用循环遍历即可:

# 获取所有唯一的污染物名称
all_pollutants = avg_em_df["Pollutant"].unique()

# 循环生成每个污染物的图表
for pollutant in all_pollutants:
    # 筛选当前污染物的数据
    pollutant_data = avg_em_df[avg_em_df["Pollutant"] == pollutant]
    # 生成折线图
    fig = px.line(
        pollutant_data,
        x="Year",
        y="Total Emissions",
        color="CAV_adoption",
        title=f"{pollutant} Average Emissions by CAV Adoption Level",
        labels={"Total Emissions": f"Average Total Emissions ({pollutant_data['UOM'].iloc[0]})"},
        markers=True
    )
    # 显示图表(如果需要保存,可替换为fig.write_html(f"{pollutant}_emissions.html"))
    fig.show()

额外提示:原始数据预处理

你的原始数据存在首行异常,建议先清理后再分组,避免潜在问题:

# 删除全为空值的异常行
nei_by_pollutant = nei_by_pollutant.dropna(how="all")
# 重置索引
nei_by_pollutant.reset_index(drop=True, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:40:17