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()

出力:

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

Author: 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