绘制和渲染Python中的多路树

前端之家收集整理的这篇文章主要介绍了绘制和渲染Python中的多路树前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有人知道如何以美学上合理的方式绘制多路树?
信息:

>或多或少100项
>每个级别都有大约相同数量的项目
> 10级
>每个节点有0(叶)和6个孩子之间
>每个节点指定它自己的层次,不管他的根源.

我正在使用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";
}
原文链接:https://www.f2er.com/python/186678.html

猜你在找的Python相关文章