使用 pydot 在 Graphviz 中垂直放置节点

Posted

技术标签:

【中文标题】使用 pydot 在 Graphviz 中垂直放置节点【英文标题】:Placing nodes vertically in Graphviz using pydot 【发布时间】:2011-01-14 00:00:59 【问题描述】:

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

【问题讨论】:

【参考方案1】:

像这样初始化你的图表:

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

这将设置图形方向从左到右。一般情况下,使用graphviz documentation 找到正确的属性以达到您想要的效果。

【讨论】:

+1 我对 pydot 文档进行了广泛的搜索,直到我看到您的回答,我才知道 graphviz 文档可以用作 pydot 文档。我在 yuo 给出的链接中测试了几个特性和参数,现在一切都清楚了。 很高兴为您提供帮助。我记得我自己多次绊倒这个问题,直到我最终弄清楚这一点 - 这个设置显然应该是默认的 IMO,因为它对于在节点中水平打印的文本更有用。【参考方案2】:

您可以做几件事。

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

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

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

【讨论】:

【参考方案3】:

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

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

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

查看 pydot 的文档here.

【讨论】:

以上是关于使用 pydot 在 Graphviz 中垂直放置节点的主要内容,如果未能解决你的问题,请参考以下文章

keras绘图之pydot和graphviz的导入( pydot` failed to call GraphViz)

在 Anaconda 环境中安装 pydot 和 graphviz 包

无法让 pydot 在 Windows 10 上找到 graphviz

keras可视化pydot graphviz问题

Keras:“运行时错误:导入 pydot 失败。”安装 graphviz 和 pydot 后

ImportError: 无法导入 pydot。您必须安装 pydot 和 graphviz 才能使 `pydotprint` 工作