Bra*_*orm 11 python tree graph graphviz multiway-tree
有人知道我如何以美学上似乎合理的方式绘制多路树?信息:
我目前正在使用PIL,将每个"线"划分为img.size()[0]/节点数,并绘制线draw.line来表示边缘,但它完全搞砸了
我希望你能帮助我=],我要发布的任何信息.
dou*_*oug 18
因此,渲染图形是graphviz的特殊天才,它也恰好有几个提供python绑定的库.在我看来,这些绑定库中最好的是pygraphviz.Graphviz可能是最好的解决方案,也可能是最简单的解决方案.
您在问题中描述的特定布局是一种分层的分层方案,由graphviz的点布局引擎轻松执行.Dot执行渲染以确保图形以自然树配置布局 - 即父节点位于其子节点之上; 在可能的情况下,相等等级的节点(来自根的等级)与y轴等距离,并且在可能的情况下保持自然对称性.
(注意:令人困惑的是,dot指的是包含graphviz的几个布局引擎之一,但dot也是所有graphviz文档的文件格式的名称和文件扩展名,无论它们是如何呈现的).
正如您在我的代码中看到的那样,使用pygraphviz,选择dot作为图形的布局引擎很简单,尽管它实际上并不是默认值(neato是).
这是我制作的快速图表,然后使用点创建 -使用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";
}
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
15322 次 |
| 最近记录: |