なにこれ
前回こんな記事を書きました。
ユーザー行動フローをPlotlyのSankeyDiagramで可視化する - 夕蛙のなく頃に
デフォルトだとリンクの色は全て灰色なので、青色のノードから伸びるリンクは青色に、という具合にリンクの色をSourceに合わせるよう修正を入れます。
Collaboratoryはこちら: https://drive.google.com/open?id=1TjBAaAYUTBE-dY8cxwlaiA_WmV4s5nuQ
Colormapリストの準備
まず'#1f77b4' のような色を指定するHEX値が詰まったリストを準備します。
以下の記事を参考にさせていただきました。
matplotlibでcolor cycleのN番目の色を指定するいくつかの方法 - Qiita
import matplotlib.pyplot as plt import numpy as np colormap = [] for color in np.array(plt.get_cmap("tab10").colors) * 255: rgb = color.astype(int) rgb = '#{:02x}{:02x}{:02x}'.format(*tuple(rgb)) colormap.append(rgb) --> colormap = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', ...]
Plotlyに渡すcolorリストを作成
あとは、sourceリストを作成するときに使ったindex番号に対応するcolormapをリストにするだけです。
(前回のsourceやtargetを準備する部分に追記します)
labels = list(edges.keys()) sources = [] targets = [] values = [] colors = [] for src in edges: for tgt, v in edges[src].items(): sources.append(labels.index(src)) targets.append(labels.index(tgt)) values.append(v) # srcに相当するindex番号をlabelsから探して、そのindex番号でcolormapにアクセスする # これをsrcではなく、tgtにすれば、リンク先の色と合わせることができる colors.append(colormap[labels.index(src)])
PlotlyのSankeyDiagramで可視化
data = dict( type='sankey', node = dict( label = labels, color = colormap[:len(labels)] ), link = dict( source = sources, target = targets, value = values, color = colors )) layout = dict( title = "行動フロー", font = dict( size = 20 ) ) fig = dict(data=[data], layout=layout) plotly.offline.plot(fig, validate=False) HTML('temp-plot.html')
前回の成果物
今回の成果物
ノード・リンクの数が増えても見やすくなりそうですね!