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 に答える