我通过pydot在Python中使用Graphviz。我正在制作的图表中有许多有向图集。 pydot将它们水平放置,使得图像非常宽。如何告诉它输出最大宽度的图像,以便我可以垂直滚动?
答案 0 :(得分:12)
你可以做几件事。
您可以使用“尺寸”设置图表的最大尺寸(例如,尺寸=“4,8”(英寸))。这会修复最终布局的大小。与点语言中的大多数其他节点,边和图形参数不同,“大小”没有默认值。此外,默认方向是“纵向”,我相信这是您想要的(对于更高而更宽的图形),但您可能希望显式设置此参数,以防它先前设置为“横向”。
'尺寸'可与'比率'参数(布局纵横比)一起使用来操纵配置。 '比率'采用浮动(例如,比率=“2.0”)或“自动”或“填充”。 (后者告诉graphviz填充使用'size'分配的整个图形区域。
对图表配置影响最大的参数是“ nodesep ”和“ ranksep ”。这些是相等“等级”的相邻节点之间的最小水平距离,以及相邻等级节点之间的最小垂直距离。默认值分别为0.25和0.75英寸。要获得所需的配置,您需要同时增加nodesep并降低ranksep 。逐步迭代应该允许您快速收敛这两个参数的一组值,从而为您提供所需的配置。
答案 1 :(得分:10)
按照以下方式初始化图表:
graph = pydot.Dot(graph_type='digraph', rankdir='LR')
这将从左到右设置图形方向。通常,使用graphviz documentation查找正确的属性,以达到您想要的效果。
答案 2 :(得分:6)
我不确定您是否能够对数据执行此操作,但如果更改节点插入图表的顺序,则可能会影响生成的图形。如果您不想向Graphviz提供任何订购信息,并希望Graphviz尝试解决节点的最佳放置以最大限度地减少争用,请使用Graphviz的neato
代替。它使用弹簧模型来确定应放置节点的位置。
看起来您应该能够在pydot中使用neato
,如:
my_graph.write('my_graph.png', prog='neato', format='png')
请参阅pydot的文档here.