2024-05-13 03:58:12 发布
网友
有人知道我如何以一种美学上合理的方式绘制一棵多向树吗? 信息:
我目前正在使用PIL,在img.size()[0]/节点数中划分每个“线”,并用draw.line绘制线来表示边,但它是完全混乱的
img.size()[0]
draw.line
我希望你能帮助我,任何需要我发布的信息。
因此,呈现图形是graphviz的天才,它碰巧也有几个库提供python绑定。在我看来,这些绑定库中最好的是pygraphviz。Graphviz可能是最好的解决方案,也可能是最简单的。
您在问题中描述的特定布局是一个层次化的分层方案,由graphviz'dot布局引擎轻松执行。Dot执行渲染以确保图形以自然树配置布局——即父节点位于其子节点之上;等秩节点(从根开始的级别)尽可能在y轴的w/r/t处等距放置,尽可能保持自然对称。
(注意:令人困惑的是,dot指组成graphviz的几个布局引擎之一,但是dot也是所有graphviz文档的文件格式的名称和文件扩展名,而不管它们是如何呈现的)。
正如您在下面的代码中看到的,使用pygraphviz,选择dot作为图形的布局引擎很简单,尽管它实际上不是默认的(neato是)。
下面是我制作的一个快速图形,然后使用dot进行渲染——使用graphviz通过pygraphviz创建和渲染。
请注意,图形具有完美的布局--具有相同程度的节点沿垂直轴处于同一级别,子节点呈现在父节点下方,并且尽可能保留自然的“对称性”(例如,父节点位于其两个子节点之间和上方)。如您所见,没有一个代码手动控制布局——graphviz,即dot,自动处理它。
import pygraphviz as PG A = PG.AGraph(directed=True, strict=True) A.add_edge("7th Edition", "32V") A.add_edge("7th Edition", "Xenix") # etc., etc. # save the graph in dot format A.write('ademo.dot') # pygraphviz renders graphs in neato by default, # so you need to specify dot as the layout engine A.layout(prog='dot') # opening the dot file in a text editor shows the graph's syntax: digraph unix { size="7,5"; node [color=goldenrod2, style=filled]; "7th Edition" -> "32V"; "7th Edition" -> "V7M"; "7th Edition" -> "Xenix"; "7th Edition" -> "UniPlus+"; "V7M" -> "Ultrix-11"; "8th Edition" -> "9th Edition"; "1 BSD" -> "2 BSD"; "2 BSD" -> "2.8 BSD"; "2.8 BSD" -> "Ultrix-11"; "2.8 BSD" -> "2.9 BSD"; "32V" -> "3 BSD"; "3 BSD" -> "4 BSD"; "4 BSD" -> "4.1 BSD"; "4.1 BSD" -> "4.2 BSD"; "4.1 BSD" -> "2.8 BSD"; "4.1 BSD" -> "8th Edition"; "4.2 BSD" -> "4.3 BSD"; "4.2 BSD" -> "Ultrix-32"; }
因此,呈现图形是graphviz的天才,它碰巧也有几个库提供python绑定。在我看来,这些绑定库中最好的是pygraphviz。Graphviz可能是最好的解决方案,也可能是最简单的。
您在问题中描述的特定布局是一个层次化的分层方案,由graphviz'dot布局引擎轻松执行。Dot执行渲染以确保图形以自然树配置布局——即父节点位于其子节点之上;等秩节点(从根开始的级别)尽可能在y轴的w/r/t处等距放置,尽可能保持自然对称。
(注意:令人困惑的是,dot指组成graphviz的几个布局引擎之一,但是dot也是所有graphviz文档的文件格式的名称和文件扩展名,而不管它们是如何呈现的)。
正如您在下面的代码中看到的,使用pygraphviz,选择dot作为图形的布局引擎很简单,尽管它实际上不是默认的(neato是)。
下面是我制作的一个快速图形,然后使用dot进行渲染——使用graphviz通过pygraphviz创建和渲染。
请注意,图形具有完美的布局--具有相同程度的节点沿垂直轴处于同一级别,子节点呈现在父节点下方,并且尽可能保留自然的“对称性”(例如,父节点位于其两个子节点之间和上方)。如您所见,没有一个代码手动控制布局——graphviz,即dot,自动处理它。
相关问题 更多 >
编程相关推荐