在python中绘制图形 - pydotplus错误

时间:2017-10-17 16:26:16

标签: python networkx graphviz pydot

我迷失在所有用于绘制图形的 python库中 。我希望我知道一个灵活的文档 ......

我花了大量时间与 networkx 一起玩,发现它对我的任务不太好(例如,对于较大的图表重叠标签)。

现在,我正在尝试使用 pydot pydotplus ,但没有文档,没有合理的例子。或者我错过了什么? Pydotplus 网站提供了一个参考,但这对初学者来说并不完全有用。

现在,我可以使用 pydotplus 绘制图形,但我想更改节点位置(Fruchterman-Reingold算法),尤其是使用节点颜色和大小,但我不知道怎么做。

示例代码:

min-height: 100vh

这会引发异常:

import pydotplus as ptp

graph = ptp.Dot(graph_type='graph')
edges = [(1,2), (1,3), (2,4), (2,5), (3,5)]
nodes = [(1, "A", "r"), (2, "B", "g"), (3, "C", "g"), (4, "D", "r"), (5, "E", "g")]
for e in edges:
    graph.add_edge(ptp.Edge(e[0], e[1]))
for n in nodes:
    node = ptp.Node(name=n[0], attrs={'label': n[1], 'fillcolor': n[2]} )
    graph.add_node(node)
graph.write_png("file.png")

1 个答案:

答案 0 :(得分:0)

问题解决了,感谢@pgv。

  • 问题1:节点参数需要作为键=值对传递,而不是dict
  • 问题2:fillcolor本身不起作用,参数样式必须设置为"填充"

更正后的代码:

import pydotplus as ptp

graph = ptp.Dot(graph_type='graph')
edges = [(1,2), (1,3), (2,4), (2,5), (3,5)]
nodes = [(1, "A", "r"), (2, "B", "g"), (3, "C", "g"), (4, "D", "r"), (5, "E", "g")]
for e in edges:
    graph.add_edge(ptp.Edge(e[0], e[1]))
for n in nodes:
    node = ptp.Node(name=n[0], label= n[1], fillcolor=n[2], style="filled" )
    graph.add_node(node)
graph.write_png("file.png")