Python Plotly:如何使用Pandas dataframe定义Sankey图的结构?

Python Plotly:如何使用Pandas dataframe定义Sankey图的结构?

Sankey图用于通过定义“源”表示源节点和“目标”表示目标节点来可视化流动。它用于表示不同数据点之间对象的流动。

在本教程中,让我们了解如何使用DataFrame定义Sankey图的结构。在此,我们将使用 plotly.graph_objects 模块生成图形。它包含许多生成图表的方法。

Step 1

导入 plotly.graph_objs 模块并将其别名设置为 go

import plotly.graph_objs as go
Python

Step 2

导入Pandas模块并将其别名设置为 pd。

import pandas as pd
Python

Step 3

创建一个节点的两维列表,包含“id”,“label”和“color”坐标-

nodes = [
   ['id', 'label', 'color'],
   [ 0, 'A1', 'blue'],
   [ 1, 'A2', 'green'],
   [ 2, 'B1', 'red'],
   [ 3, 'B2', 'brown'],
   [ 4, 'C1', 'cyan'],
   [ 5, 'C2', 'yellow']
]
Python

Step 4

创建一个链接的两维列表,包括“源”,“目标”,“价值”和“链接颜色”,如下所示-

links = [
   ['Source', 'Target', 'Value', 'Link Color'],
   [ 0, 2, 4, 'grey'],
   [ 0, 3, 4, 'grey'],
   [ 1, 3, 4, 'grey'],
   [ 2, 4, 4, 'grey'],
   [ 3, 4, 4, 'grey'],
   [ 3, 5, 4, 'grey']
]
Python

Step 5

计算节点和链接头,并生成节点和链接的两个数据框。

nodes_headers = nodes.pop(0)
links_headers = links.pop(0)

df_nodes = pd.DataFrame(nodes, columns = nodes_headers)
df_links = pd.DataFrame(links, columns = links_headers)
Python

Step 6

接下来,创建Sankey图。将数据框节点添加到Sankey图中,并设置其颜色和厚度值。

fig = go.Figure(data=[go.Sankey(
   node = dict(
      pad = 15,
      thickness = 20,
      line = dict(color = "black", width = 0.5),
      label = df_nodes['label'].dropna(axis=0, how='any'),
      color = df_nodes['color']),
Python

Step 7

生成“源”,“目标”,“值”和“链接颜色”的链接,如下所示-

link = dict(
   source = df_links['Source'].dropna(axis=0, how='any'),
   target = df_links['Target'].dropna(axis=0, how='any'),
   value = df_links['Value'].dropna(axis=0, how='any'),
   color = df_links['Link Color'].dropna(axis=0, how='any'),
)
Python

Step 8

使用 update_layout() 方法设置Sankey图的标题。最后,使用 fig.show() 显示图表。

fig.update_layout(
   title_text="DataFrame-Sankey图",
   font_size=10
)
fig.show()
Python

使用Pandas DataFrame定义Sankey图结构的完整代码如下 –

import plotly.graph_objects as go
import pandas as pd
nodes = [
   ['id', 'label', 'color'],
   [0, 'A1', 'blue'],
   [1, 'A2', 'green'],
   [2, 'B1', 'red'],
   [3, 'B2', 'brown'],
   [4, 'C1', 'cyan'],
   [5, 'C2', 'yellow']
]
links = [
   ['Source', 'Target', 'Value', 'Link Color'],
   [0, 2, 4, 'grey'],
   [0, 3, 4, 'grey'],
   [1, 3, 4, 'grey'],
   [2, 4, 4, 'grey'],
   [3, 4, 4, 'grey'],
   [3, 5, 4, 'grey']
]

# Retrieve headers and build dataframes
nodes_headers = nodes.pop(0)
links_headers = links.pop(0)

df_nodes = pd.DataFrame(nodes, columns=nodes_headers)
df_links = pd.DataFrame(links, columns=links_headers)

fig = go.Figure(data=[go.Sankey(
   node = dict(
      pad = 15,
      thickness = 20,
      line = dict(color = "black", width = 0.5),
      label = df_nodes['label'].dropna(axis=0, how='any'),
      color = df_nodes['color']
   ),

   link = dict(
      source=df_links['Source'].dropna(axis=0, how='any'),
      target=df_links['Target'].dropna(axis=0, how='any'),
      value=df_links['Value'].dropna(axis=0, how='any'),
      color=df_links['Link Color'].dropna(axis=0, how='any'),
   )
)])

fig.update_layout(
   title_text="DataFrame-Sankey diagram",
   font_size=10
)

fig.show()
Python

输出

在执行时,会在浏览器中显示以下输出−

Python Plotly:如何使用Pandas dataframe定义Sankey图的结构?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册