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

如何使用Brightway2结合Python生成ecoinvent活动的桑基图?

用Brightway2 + Python生成ecoinvent活动桑基图的实现方法

Brightway2本身确实没有内置的桑基图生成工具,但可以通过「提取LCA数据+第三方可视化库」的组合方式实现,具体步骤如下:

  • 第一步:提取LCA计算的流数据
    先完成常规的Brightway2 LCA计算,再从计算结果中提取活动的输入输出关系、流量数值等核心数据。需要将LCA矩阵中的索引映射回具体的活动/生物流名称,整理成节点与连接的结构。
    示例代码片段:

    import brightway2 as bw
    
    # 初始化项目与数据库
    bw.projects.set_current("your_project")
    ecoinvent_db = bw.Database("ecoinvent_3.9_cutoff")
    
    # 选定目标活动并定义功能单位
    target_activity = next(act for act in ecoinvent_db if act["name"] == "your_target_activity_name")
    functional_unit = {target_activity: 1}
    
    # 执行LCA计算
    lca = bw.LCA(functional_unit)
    lca.lci()
    lca.lcia()
    
    # 提取并整理输入输出数据(需根据需求过滤微小流量、合并重复节点)
    # 核心是将矩阵数据转换为「节点名称列表」「源节点索引」「目标节点索引」「流量值」的格式
    
  • 第二步:用第三方库绘制桑基图
    用Python可视化库基于整理好的数据生成桑基图,常用选项包括:

    • plotly:支持交互式桑基图,可缩放、hover查看详情
    • sankeyflow:专注桑基图绘制的轻量库
    • matplotlib的sankey模块:适合快速生成静态桑基图

    以plotly为例的实现代码:

    import plotly.graph_objects as go
    
    # 假设已整理好数据:labels为节点名称列表,source/target为节点索引,value为对应流量
    fig = go.Figure(data=[go.Sankey(
        node=dict(
          pad=15,
          thickness=20,
          line=dict(color="black", width=0.5),
          label=labels
        ),
        link=dict(
          source=source_indices,
          target=target_indices,
          value=flow_values
        )
    )])
    
    fig.update_layout(title_text="Ecoinvent活动桑基图", font_size=10)
    fig.show()
    
  • 关键提示

    • 数据整理是核心:需处理重复节点、过滤低流量项避免图面杂乱,可参考activity-browser的实现逻辑(它本身基于Brightway2开发,桑基图功能也是先提取数据再渲染)
    • 若需包含影响评价结果,可在LCI基础上结合LCIA结果调整流量权重

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:55:23