« ^ »

networkxはGraphvizに依存していない

所要時間: 約 1分

networkxを使用するにあたりgraphvizに依存しているかどうかを調べる必要が出てきた。とりあえずGraphvizがない状態でnetworkxとmatplotlibを使い、描画できるか確認した。

import matplotlib.pyplot as plt
import networkx as nx

G = nx.DiGraph()

nodes = {
    "1": ("testing1", {'color': [0.3,0.3,0.3], 'node_size': 150, 'label': '', 'edgecolor':  [0.9, 0.5, 0.2], 'linewidth': 1}),
    "2": ("testing2", {'color': [0.3,0.3,0.3], 'node_size': 150, 'label': '', 'edgecolor':  [0.9, 0.5, 0.2], 'linewidth': 1}),
}
conns = {
    ("1", "2"):  ("testing1", "testing2",
              {'color': [1, 1, 1], 'weight': 1, 'arrowsize': 1}),
}
position = {
    "testing1": [1,3],
    "testing2": [2,4],
}

G.add_nodes_from(nodes.values())
G.add_edges_from(conns.values())

fig, ax = plt.subplots(figsize=(5, 5))

nx.draw_networkx_nodes(
    G, position, ax=ax,
    node_color=[node['color'] for node in G.nodes.values()],
    node_size=[node['node_size'] for node in G.nodes.values()],
    linewidths=[node['linewidth'] for node in G.nodes.values()],
    edgecolors=[node['edgecolor'] for node in G.nodes.values()])


nx.draw_networkx_labels(
    G, position, ax=ax,
    labels={node[0]: node[1]['label'] for node in nodes.values()},
    font_size=8,
    font_color=[1.0,1.0,1.0])

nx.draw_networkx_edges(
    G, position, ax=ax,
    width=[edge['weight'] for edge in G.edges.values()],
    edge_color=[edge['color'] for edge in G.edges.values()],
    arrowsize=[edge['arrowsize'] for edge in G.edges.values()],
    connectionstyle='arc3,rad=0.2',
    alpha=0.6)

plt.show()

実行した所、描画自体はできた。どうやらnetworkxはgraphvizに依存していなさそうだった。