如何用 IPython 表示图形
How to represent graphs with IPython
最近我发现 IPython notebook
这是一个强大的工具。作为一名 IT 学生,我一直在寻找一种在 Python 中表示图形的方法。例如,我想知道是否有一个库(如 numpy
或 matplotlib
?)可以从中提取
{ "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
已经有 使用 networkx
和 nxpd
,但是 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。
最近我发现 IPython notebook
这是一个强大的工具。作为一名 IT 学生,我一直在寻找一种在 Python 中表示图形的方法。例如,我想知道是否有一个库(如 numpy
或 matplotlib
?)可以从中提取
{ "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
已经有 networkx
和 nxpd
,但是 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。