Plotly サンキーダイアグラム

Ammar Ali 2022年4月1日
Plotly サンキーダイアグラム

このチュートリアルでは、Plotly のグラフオブジェクトの Sankey() 関数を使用してサンキーダイアグラムを作成する方法について説明します。

Plotly サンキーダイアグラム

サンキーダイアグラムは、さまざまなノードがリンクを介して接続するフローダイアグラムとしてデータを表します。リンクの幅はノードの値を表します。

plotly.graph_objectSankey() 関数を使用して、サンキーダイアグラムを作成できます。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()

出力:

6つのノードのサンキーダイアグラム

ノードの色を 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()

出力:

サンキー図のプロパティを変更する

著者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

関連記事 - Plotly Plot