当前位置:首页>python>python数据可视化技巧的100个练习 -- 23. 创建能量流的桑基图

python数据可视化技巧的100个练习 -- 23. 创建能量流的桑基图

  • 2026-10-11 06:17:55
python数据可视化技巧的100个练习 -- 23. 创建能量流的桑基图
重要性★★★★☆
难度★★★☆☆
你是一家能源公司的数据分析师,该公司希望可视化来自不同能源(如煤炭、天然气和太阳能)到各个部门(如住宅、商业和工业)的能量流动。
你的任务是创建一个桑基图,以显示从不同能源到各个部门的能量流动。
数据应在代码中生成。
这个练习的目的是练习 Python 数据操作和可视化。
请编写代码,使用 Python 创建桑基图。

【数据生成代码示例】

import pandas as pdimport plotly.graph_objects as godata = {    'source': ['Coal', 'Coal', 'Natural Gas', 'Natural Gas', 'Solar'],    'target': ['Residential', 'Commercial', 'Residential', 'Industrial', 'Commercial'],    'value': [100, 200, 150, 250, 300]}df = pd.DataFrame(data)

【图表答案】

【代码答案】

import pandas as pdimport plotly.graph_objects as godata = {    'source': ['Coal', 'Coal', 'Natural Gas', 'Natural Gas', 'Solar'],    'target': ['Residential', 'Commercial', 'Residential', 'Industrial', 'Commercial'],    'value': [100, 200, 150, 250, 300]}df = pd.DataFrame(data)labels = list(set(df['source']).union(set(df['target'])))label_to_index = lambda x: labels.index(x)source_indices = [label_to_index(x) for x in df['source']]target_indices = [label_to_index(x) for x in df['target']]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=df['value']    ))])fig.update_layout(title_text="能量流桑基图", font_size=10)fig.show()
在这个练习中,你将学习如何使用 Python 创建桑基图,这是一种强大的工具,用于可视化从不同能源到各个部门的能量流动。
首先,我们导入必要的库:用于数据操作的 pandas 和用于创建桑基图的 plotly.graph_objects。
然后,我们创建一个包含源、目标和值的字典,这些数据代表能量流动。
这些数据被转换为 pandas DataFrame,便于操作。
接下来,我们从源和目标列生成唯一的标签列表,并创建一个映射函数,将这些标签转换为索引。
然后,我们使用列表推导式创建源和目标索引的列表。
最后,我们使用 plotly.graph_objects 库创建桑基图。
我们定义了节点和链接,指定了它们的属性,如填充、厚度和标签。
然后,使用 fig.show() 方法显示图表。

【小知识】

桑基图以马修·亨利·菲尼阿斯·里亚尔·桑基上尉(Matthew Henry Phineas Riall Sankey)的名字命名,他在 1898 年首次使用这种图表来展示蒸汽机的能效。
Plotly 是一个交互式、开源的图形库,支持超过 40 种独特的图表类型,包括桑基图。
桑基图特别适用于可视化能量、材料和成本流动,使其成为能源、制造业和金融等各个行业的有价值工具。

最新文章

随机文章