如何使用IPython表示图表

7

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

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

有类似于这样的东西吗?

(来源:developpez.com)

是否有类似的东西?


重复?我正在测试:https://dev59.com/BWIk5IYBdhLWcg3wN71j - FunkySayu
3个回答

9
你可以使用 NetworkX,如果需要在IPython笔记本中呈现图形,可以使用 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')

enter image description here


谢谢,这正是我在寻找的。关于有价图,我只有一个小问题。我应该手动打印估值还是有参数可以使用?我查找了库“nxpd”,但没有找到相关内容。 - FunkySayu
nxpd can be installed with pip install nxpd - dominik andreas
上述示例在NetworkX 3.2和nxpd 0.2.0中出现了AttributeError: 'DiGraph' object has no attribute 'number_of_selfloops'的错误。 - undefined

6
您可以使用 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')

然后,在一个 markdown 块中:

![graph](graph.png)

这将呈现为:

图表


1

已经有 使用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)

enter image description here

查看networkx文档以获取更多布局算法。


我尝试了其他答案,但似乎pip选择了两个软件包的不兼容版本。这个答案让我省去了研究的时间。 - Bananach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接