Plotly サンキーダイアグラム
このチュートリアルでは、Plotly のグラフオブジェクトの Sankey()
関数を使用してサンキーダイアグラムを作成する方法について説明します。
Plotly サンキーダイアグラム
サンキーダイアグラムは、さまざまなノードがリンクを介して接続するフローダイアグラムとしてデータを表します。リンクの幅はノードの値を表します。
plotly.graph_object
の Sankey()
関数を使用して、サンキーダイアグラムを作成できます。Sankey()
関数には、ノードとリンクの 2つの主要な引数があります。node
引数内に、各ノードのラベルを定義するラベルを渡すことができます。
ノードの色、ノードの厚さ、および各ノード間の距離を渡すこともできます。リンクのソース、ターゲット、値などのリンク引数内にリンク情報を渡すことができます。
ノードラベルのインデックスを使用して、ソースノードとターゲットノードを指定できます。値は任意の整数にすることができます。たとえば、最初の 2つのノードを接続する場合は、ソースリストに 0 を渡し、ターゲットリストに 1 を渡します。
たとえば、6つのノードのサンキーダイアグラムを作成してみましょう。以下のコードを参照してください。
import plotly.graph_objects as go
fig = go.Figure(
data=[
go.Sankey(
node=dict(
pad=50, thickness=5, label=["A", "B", "C", "D", "E", "F"], color="blue"
),
link=dict(
source=[0, 1, 0, 2, 3, 3],
target=[5, 3, 3, 4, 4, 5],
value=[3, 4, 2, 8, 4, 2],
),
)
]
)
fig.show()
出力:
ノードの色を Plotly でサポートされている任意の色に変更できます。color
引数内に 1つの色のみを渡すと、すべてのノードが同じ色になります。
単一の色名の代わりに色名のリストを使用して、各ノードに異なる色を付けることができます。各ノードの色を変更するのと同じ方法で、各リンクの色を変更することもできます。
node
パラメータ内の line 引数を使用して、各ノードの周囲に線を追加することもできます。また、線の色と幅を設定することもできます。update_layout
関数の title_text
引数を使用して図にタイトルを追加できます。また、font_size
引数を使用してテキストフォントを設定することもできます。
valueformat
引数を使用してリンクにカーソルを合わせると、表示される値の形式を設定できます。valuesuffix
引数を使用して、各値の後にサフィックスを追加することもできます。
orientation
引数を使用してサンキーダイアグラムの方向を変更し、その値を垂直方向の場合は v に、水平方向の場合は h に設定することもできます。
update_layout()
関数内の plot_bgcolor
および paper_bgcolor
引数を使用して、プロットの背景色と紙の背景色を変更することもできます。
hovertemplate
引数を使用して、カーソルがリンクまたはノードにカーソルを合わせたときに表示する情報を変更することもできます。ホバーボックス内に変数の値を表示する場合は、パーセント記号を使用して、中括弧内に変数名を入れることができます。
上記のプロパティを変更してみましょう。以下のコードを参照してください。
import plotly.graph_objects as go
fig = go.Figure(
data=[
go.Sankey(
valueformat=".0f",
valuesuffix=" kg",
orientation="v",
node=dict(
pad=50,
thickness=10,
line=dict(color="red", width=2),
label=["A", "B", "C", "D", "E", "F"],
color=["blue", "red", "green", "yellow", "brown"],
),
link=dict(
source=[0, 1, 0, 2, 3, 3],
target=[5, 3, 3, 4, 4, 5],
value=[3, 4, 2, 8, 4, 2],
color=["blue", "red", "green", "yellow", "brown"],
hovertemplate="This link has total value %{value}<extra></extra>",
),
)
]
)
fig.update_layout(
title_text="Sankey Diagram",
font_size=16,
plot_bgcolor="white",
paper_bgcolor="lightblue",
)
fig.show()
出力: