13

我通过 pydot 在 Python 中使用 Graphviz。我正在制作的图表有许多有向图集群。pydot 将它们水平地彼此相邻放置,从而产生非常宽的图像。如何告诉它输出最大宽度的图像,以便我可以垂直滚动?

4

3 回答 3

12

像这样初始化你的图表:

graph = pydot.Dot(graph_type='digraph', rankdir='LR')

这将设置图形方向从左到右。通常,使用graphviz 文档来找到正确的属性以实现您想要的。

于 2013-05-01T03:26:41.183 回答
12

您可以做几件事。

  1. 您可以使用'size' 设置图表的最大尺寸(例如,size = "4, 8" (inches))。这修复了最终布局的大小。与点语言中的大多数其他节点、边和图形参数不同,“大小”没有默认值。此外,默认方向是“纵向”,我相信这是您想要的(对于更高与更宽的图形),但您可能需要明确设置此参数,以防它之前设置为“横向”。

  2. 'Size' 可以与 ' ratio ' 参数(布局纵横比)一起使用来操纵配置。'Ratio' 采用浮点数(例如,ratio = "2.0")或 'auto' 或 'fill'。(后者告诉 graphviz 填充使用由“大小”分配的整个图形区域。

  3. 对图配置影响最大的参数是“ nodesep ”和“ rankep ”。这些是相同“等级”的相邻节点之间的最小水平距离,以及相邻等级节点之间的最小垂直距离。默认值分别为 0.25 和 0.75 英寸。要获得您想要的配置,您需要同时增加 nodeep 和减少 rowsep。逐步迭代应该允许您快速收敛到这两个参数的一组值,从而为您提供所需的配置。

于 2010-02-07T03:59:37.240 回答
7

我不确定您是否能够对数据执行此操作,但如果您更改节点插入图表的顺序,它确实会影响生成的图表。如果您不想向 Graphviz 提供任何排序​​信息并希望 Graphviz 尝试解决节点的最佳放置以最小化争用,请改用 Graphviz neato。它使用弹簧模型来确定应放置节点的位置。

看起来您应该能够neato在 pydot 中使用,例如:

my_graph.write('my_graph.png', prog='neato', format='png')

在此处查看 pydot 的文档

于 2010-02-07T01:43:06.937 回答