python数据可视化技巧的100个练习 -- 23. 创建能量流的桑基图
你是一家能源公司的数据分析师,该公司希望可视化来自不同能源(如煤炭、天然气和太阳能)到各个部门(如住宅、商业和工业)的能量流动。你的任务是创建一个桑基图,以显示从不同能源到各个部门的能量流动。这个练习的目的是练习 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 库创建桑基图。我们定义了节点和链接,指定了它们的属性,如填充、厚度和标签。【小知识】
桑基图以马修·亨利·菲尼阿斯·里亚尔·桑基上尉(Matthew Henry Phineas Riall Sankey)的名字命名,他在 1898 年首次使用这种图表来展示蒸汽机的能效。Plotly 是一个交互式、开源的图形库,支持超过 40 种独特的图表类型,包括桑基图。桑基图特别适用于可视化能量、材料和成本流动,使其成为能源、制造业和金融等各个行业的有价值工具。