均匀分布 pygraphviz 节点
evenly distribute pygraphviz nodes
我有这样的 graphviz 代码:
import pygraphviz as pgv
A = pgv.AGraph(strict=False, directed=True,
overlap=False, sep="+10,10")
[A.add_node(k) for k, v in S] # adding all nodes
A.add_edge(S.created, S.packaged_unassigned)
A.add_edge(S.packaged_unassigned, S.packaged_assigned)
A.add_edge(S.packaged_assigned, S.packaged_unassigned, style="dotted")
A.add_edge(S.packaged_assigned, S.shipped_to_distributor)
A.add_edge(S.shipped_to_distributor, S.on_distributor_side_out)
A.add_edge(S.on_distributor_side_out, S.shipped_to_deployer)
A.add_edge(S.shipped_to_deployer, S.on_distributor_side_in)
A.add_edge(S.on_distributor_side_in, S.shipped_to_lab)
A.add_edge(S.shipped_to_lab, S.on_lab_side)
A.add_edge(S.on_lab_side, S.analysis_completed)
A.add_edge(S.analysis_completed, S.completed)
A.layout()
A.draw("status_chart.png")
产生这个输出:
https://i.ibb.co/7pJQ8rd/Screenshot-2020-12-20-at-22-23-10.png
我担心的是节点似乎没有正确利用可用的 space。相反,它们只是跨越图像的对角线。
我怎样才能使 graphviz 更好地利用 space 来创建较小的图像,同时保持不重叠的约束?
一个约束条件是您指定了一个链式图。因此,情节在某种程度上受到了限制。
请参阅文档以了解一些可能的替代选项以指定:
https://pygraphviz.github.io/documentation/latest/reference/agraph.html
例如,您可以尝试指定横向视图
AGraph(风景='true'...)
您也可以尝试使用不同的布局指令:
可选prog=[‘neato’|’dot’|’twopi’|’circo’|’fdp’|’nop’]将使用指定的graphviz布局方法。
另见:
unflatten(args='')
调整有向图以改善布局纵横比。
您可以使用的另一种技术是分解图形的各个部分,使其看起来像这样(使用编号方案向节点添加文本标签):
(1) -> (2) ->(3)
(4) -> (5) ->(6)
...
注意:该库的 Python 文档 特别是 建议您还参考 Graphviz 文档...更多选项。
http://www.graphviz.org/doc/info/lang.html
http://www.graphviz.org/doc/info/attrs.html
例如:
http://www.graphviz.org/doc/info/attrs.html#d:ratio
http://www.graphviz.org/doc/info/attrs.html#a:layout
http://www.graphviz.org/doc/info/attrs.html#d:scale
画廊也有一些很好的例子,说明了不同参数的使用
我有这样的 graphviz 代码:
import pygraphviz as pgv
A = pgv.AGraph(strict=False, directed=True,
overlap=False, sep="+10,10")
[A.add_node(k) for k, v in S] # adding all nodes
A.add_edge(S.created, S.packaged_unassigned)
A.add_edge(S.packaged_unassigned, S.packaged_assigned)
A.add_edge(S.packaged_assigned, S.packaged_unassigned, style="dotted")
A.add_edge(S.packaged_assigned, S.shipped_to_distributor)
A.add_edge(S.shipped_to_distributor, S.on_distributor_side_out)
A.add_edge(S.on_distributor_side_out, S.shipped_to_deployer)
A.add_edge(S.shipped_to_deployer, S.on_distributor_side_in)
A.add_edge(S.on_distributor_side_in, S.shipped_to_lab)
A.add_edge(S.shipped_to_lab, S.on_lab_side)
A.add_edge(S.on_lab_side, S.analysis_completed)
A.add_edge(S.analysis_completed, S.completed)
A.layout()
A.draw("status_chart.png")
产生这个输出: https://i.ibb.co/7pJQ8rd/Screenshot-2020-12-20-at-22-23-10.png
我担心的是节点似乎没有正确利用可用的 space。相反,它们只是跨越图像的对角线。 我怎样才能使 graphviz 更好地利用 space 来创建较小的图像,同时保持不重叠的约束?
一个约束条件是您指定了一个链式图。因此,情节在某种程度上受到了限制。
请参阅文档以了解一些可能的替代选项以指定:
https://pygraphviz.github.io/documentation/latest/reference/agraph.html
例如,您可以尝试指定横向视图 AGraph(风景='true'...)
您也可以尝试使用不同的布局指令:
可选prog=[‘neato’|’dot’|’twopi’|’circo’|’fdp’|’nop’]将使用指定的graphviz布局方法。
另见:
unflatten(args='')
调整有向图以改善布局纵横比。
您可以使用的另一种技术是分解图形的各个部分,使其看起来像这样(使用编号方案向节点添加文本标签):
(1) -> (2) ->(3)
(4) -> (5) ->(6)
...
注意:该库的 Python 文档 特别是 建议您还参考 Graphviz 文档...更多选项。
http://www.graphviz.org/doc/info/lang.html
http://www.graphviz.org/doc/info/attrs.html
例如:
http://www.graphviz.org/doc/info/attrs.html#d:ratio
http://www.graphviz.org/doc/info/attrs.html#a:layout
http://www.graphviz.org/doc/info/attrs.html#d:scale
画廊也有一些很好的例子,说明了不同参数的使用