【发布时间】:2011-01-14 00:00:59
【问题描述】:
我通过 pydot 在 Python 中使用 Graphviz。我正在制作的图表有许多有向图集群。 pydot 将它们水平地彼此相邻放置,从而产生非常宽的图像。如何告诉它输出最大宽度的图像,以便我可以垂直滚动?
【问题讨论】:
标签: python visualization graphviz pydot
我通过 pydot 在 Python 中使用 Graphviz。我正在制作的图表有许多有向图集群。 pydot 将它们水平地彼此相邻放置,从而产生非常宽的图像。如何告诉它输出最大宽度的图像,以便我可以垂直滚动?
【问题讨论】:
标签: python visualization graphviz pydot
像这样初始化你的图表:
graph = pydot.Dot(graph_type='digraph', rankdir='LR')
这将设置图形方向从左到右。一般情况下,使用graphviz documentation 找到正确的属性以达到您想要的效果。
【讨论】:
您可以做几件事。
您可以使用“size”设置图表的最大尺寸(例如,size = "4, 8"(英寸))。这修复了最终布局的大小。与点语言中的大多数其他节点、边和图形参数不同,“大小”没有默认值。此外,默认方向是“纵向”,我相信这是您想要的(对于更高与更宽的图形),但您可能需要明确设置此参数,以防它之前设置为“横向”。
'Size' 可以与'ratio' 参数(布局纵横比)一起使用来操纵配置。 'Ratio' 采用浮点数(例如,ratio = "2.0")或 'auto' 或 'fill'。 (后者告诉graphviz填充使用由'size'分配的整个图形区域。
对图配置影响最大的参数是“nodesep”和“ranksep”。这些是“等级”相同的相邻节点之间的最小水平距离,以及相邻等级节点之间的最小垂直距离。默认值分别为 0.25 和 0.75 英寸。要获得您想要的配置,您需要同时增加 nodeep 和减少 rowsep。逐步迭代应该允许您快速收敛到这两个参数的一组值,从而为您提供所需的配置。
【讨论】:
我不确定您是否能够对您的数据执行此操作,但如果您更改节点插入图表的顺序,它确实会影响生成的图表。如果您不想向 Graphviz 提供 任何 订购信息,并希望 Graphviz 尝试解决节点的最佳放置以最大限度地减少争用,请改用 Graphviz 的neato。它使用弹簧模型来确定节点应该放置在哪里。
看起来您应该可以在 pydot 中使用 neato,例如:
my_graph.write('my_graph.png', prog='neato', format='png')
查看 pydot 的文档here.
【讨论】: