如何用 IPython 表示图形

How to represent graphs with IPython

最近我发现 IPython notebook 这是一个强大的工具。作为一名 IT 学生,我一直在寻找一种在 Python 中表示图形的方法。例如,我想知道是否有一个库(如 numpymatplotlib ?)可以从中提取

{ "1" : ["3", "2"],
  "2" : ["4"],
  "3" : ["6"],
  "4" : ["6"],
  "5" : ["7", "8"],
  "6" : [],
  "7" : [],
  "8" : []
}

像这样:

有这样的吗?

您可以使用networkx and, if you need to render the graph in ipython notebook, nxpd

import networkx as nx
from nxpd import draw
G = nx.DiGraph()
G.graph['dpi'] = 120
G.add_nodes_from(range(1,9))
G.add_edges_from([(1,2),(1,3),(2,4),(3,6),(4,5),(4,6),(5,7),(5,8)])
draw(G, show='ipynb')

您可以使用 pygraphviz:

import pygraphviz

G = pygraphviz.AGraph(directed=True)
G.add_nodes_from(range(1,9))
G.add_edges_from([(1,2),(1,3),(2,4),(3,6),(4,5),(4,6),(5,7),(5,8)])
G.layout()
G.draw('graph.png')

然后在降价块中:

![graph](graph.png)

渲染到:

如果您还想为图表制作动画(例如,探索算法的工作原理),您可以使用 https://github.com/mapio/GraphvizAnim

已经有 使用 networkxnxpd,但是 networkx 本身可以直接通过 matplotlib 绘制(所以你不需要nxpd):

import networkx as nx

%matplotlib inline

g = nx.DiGraph()
g.add_nodes_from(range(1, 9))
g.add_edges_from([(1, 2), (1, 3), (2, 4), (3, 6), (4, 5), (4, 6), (5, 7), (5, 8)])

nx.draw_planar(g, with_labels=True)

有关更多布局算法,请参阅 networkx documentation