2015-03-12 2 views
0

Мой вопрос в Pydot, как я могу установить порядок узлов в кластере?Pydot/Graphviz: Как упорядочить горизонтальные узлы в кластере, в то время как остальная часть графика вертикальна

Мой код

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') 

Я хотел бы иметь кластер «легенда» и «node_c» в вертикальном порядке но 2 узлов (legend1 и legend2) в «graphlegend» кластер организован горизонтально в очереди. Я пробовал использовать rank = same, но не работает Можете ли вы мне помочь?

ответ

0

Возможно, вам понравится rankdir="TB". Вертикальное упорядочение выполняется по рангу в зависимости от видимых или невидимых краев. rank="same" может понадобиться, если есть горизонтальные края.

+0

Когда я заменяю rankdir = "LR" по rankdir = "TB" , он делает все горизонтальным, но не только в кластере node_c также находится справа от кластера. –

0

я наконец-то нашел альтернативное решение, используя невидимый край

код теперь:

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")) 

Поступая таким образом мои различные узлы в графе по-прежнему организованы по вертикали и ранг в горизонтальном , И мой независимый кластер теперь показывает узлы в горизонтальном положении благодаря невидимому краю.