ネットワークグラフを動的に描画する
以前の投稿では, NetworkXを用いたネットワークの描画について述べた. 今回は, Plotlyを組み合わせることで, ネットワークグラフを動的に描画する方法を学んだため, そのサンプルコードを残す.
import networkx as nx
import plotly.graph_objects as go
# ランダムなグラフの生成
G = nx.random_geometric_graph(200, 0.125)
# ポジションの取得
pos = nx.get_node_attributes(G, 'pos')
# エッジの取得
edge_x = []
edge_y = []
for edge in G.edges():
x0, y0 = pos[edge[0]]
x1, y1 = pos[edge[1]]
edge_x.extend([x0, x1, None])
edge_y.extend([y0, y1, None])
edge_trace = go.Scatter(
x=edge_x, y=edge_y,
line=dict(width=0.5, color='#888'),
hoverinfo='none',
mode='lines')
# ノードの取得
node_x = []
node_y = []
for node in G.nodes():
x, y = pos[node]
node_x.append(x)
node_y.append(y)
node_trace = go.Scatter(
x=node_x, y=node_y,
mode='markers',
hoverinfo='text',
marker=dict(
showscale=True,
colorscale='YlGnBu',
color=[],
size=10,
colorbar=dict(
thickness=15,
title='接続数',
xanchor='left',
titleside='right'
),
line_width=2))
# ノードの接続数によるカラー設定
node_adjacencies = []
node_text = []
for node, adjacencies in G.adjacency():
num_neighbors = len(adjacencies) # 隣接ノードの数を取得
node_adjacencies.append(num_neighbors)
node_text.append(f'ノード {node}:{num_neighbors} 接続')
node_trace.marker.color = node_adjacencies
node_trace.text = node_text
# 図の作成
fig = go.Figure(data=[edge_trace, node_trace],
layout=go.Layout(
title='ネットワークグラフの可視化',
titlefont_size=16,
showlegend=False,
hovermode='closest',
margin=dict(b=20, l=5, r=5, t=40),
annotations=[dict(
text="Pythonでのネットワークグラフ",
showarrow=False,
xref="paper", yref="paper")],
xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
yaxis=dict(showgrid=False, zeroline=False, showticklabels=False))
)
fig.show()