如何使用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
相关产品推荐
相关产品推荐

