绘制和渲染Python中的多路树
|
有人知道如何以美学上合理的方式绘制多路树?
>或多或少100项 我正在使用PIL,将img.size()[0] /节点数中的每个“line”划分,并用draw.line绘制线条来表示边缘,但是它完全搞砸了 我希望你能帮助我=],我会发布的任何信息. 解决方法因此,渲染图是 graphviz的特殊天才,也恰好有几个提供python绑定的库.在我看来,这些绑定库中最好的是 pygraphviz. Graphviz可能是最好的解决方案,也可能是最简单的.您在Question中描述的特定布局,层次分层的方案,由graphviz的点布局引擎轻松执行. Dot执行渲染以确保图形以自然树配置布局 – 即父节点位于其子节点之上;等级(从根的等级)的节点在可能的情况下等于y轴的w / r / t,并且在可能的情况下保持自然对称性. (注意:令人困惑的是,dot指的是构成graphviz的几个布局引擎之一,但是dot也是所有graphviz文件的文件格式的名称和文件扩展名,无论它们如何呈现). 正如你可以在下面的代码中看到的那样,使用pygraphviz,选择dot作为图形的布局引擎很简单,尽管它实际上并不是默认的(neato是). 这是一个快速的图形,然后渲染使用点创建和渲染使用graphviz通过pygraphviz. 请注意,图形具有完美的布局 – 相同程度的节点沿垂直轴位于同一级别,孩子被渲染在父母之下,并且在可能时保留自然对称性(例如,父节点位于其上方两个子节点,而您可以看到,我的代码都没有手动控制布局 – graphviz,即点,自动处理. 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";
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
