4

我的问题是在 Pydot 中如何设置集群中的节点顺序?

我的代码是

import pydot
graph = pydot.Dot(graph_type='digraph', rankdir="LR")
graphlegend = pydot.Cluster(graph_name="legend", label="Legend", fontsize="15", color="red", style="filled", fillcolor="lightgrey")

legend1 = pydot.Node("Sample", style="filled", fillcolor="Tomato", shape="diamond", rank="same"); graphlegend.add_node(legend1)

legend2 = pydot.Node('a', style="filled", fillcolor="LightGoldenrod", shape="Mrecord", label="Protein", rank="same"); graphlegend.add_node(legend2)

node_c = pydot.Node("ff", style="filled", fillcolor="#9ACEEB", shape="square"); graph.add_node(node_c)

graph.write_png('Sample_diagraph.png')

我希望集群“legend”和“node_c”以垂直顺序排列,但“graphlegend”集群中的 2 个节点(legend1 和 legend2)水平排列成一行。我尝试使用 rank=same 但不起作用你能帮帮我吗?

4

2 回答 2

4

我终于通过使用隐形边缘找到了替代解决方案

现在的代码是:

graph = pydot.Dot(graph_type='digraph', rankdir="LR")

graphlegend = pydot.Cluster(graph_name="legend", label="Legend", fontsize="15", color="red", style="filled", fillcolor="lightgrey", rankdir="TB")
legend1 = pydot.Node("Sample", style="filled", fillcolor="Tomato", shape="diamond", rank="same"); graphlegend.add_node(legend1)
legend2 = pydot.Node('a', style="filled", fillcolor="LightGoldenrod", shape="Mrecord", label="Protein", rank="same"); graphlegend.add_node(legend2)

graph.add_subgraph(graphlegend)

graph.add_edge(pydot.Edge(legend1, legend2, style="invis"))

通过这样做,我在图中的不同节点仍然是垂直组织的,而排名是水平的。由于不可见的边缘,我的独立集群现在水平显示节点。

在此处输入图像描述

于 2015-03-13T00:58:54.303 回答
1

很可能你想要rankdir="TB"从上到下的排名。然后根据可见或不可见边缘按等级进行垂直排序。rank="same"如果有水平边缘,则可能需要。

于 2015-03-12T10:21:17.323 回答