Pydot/Graphviz: Как упорядочить горизонтальные узлы в кластере, в то время как остальная часть графика является вертикальной
Мой вопрос в 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" располагались в вертикальном порядке, но 2 узла (legend1 и legend2) в кластере "graphlegend" были расположены горизонтально в одну линию. Я пытался использовать rank=same, но не работает. Можете ли вы помочь мне, пожалуйста?
2 ответа
Я наконец нашел альтернативное решение, используя невидимое ребро
код сейчас:
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"))
Таким образом, мои разные узлы на графике по-прежнему организованы по вертикали, а ранг - по горизонтали. И мой независимый кластер теперь показывает узлы в горизонтальном положении благодаря невидимому краю.
Скорее всего, вы хотите rankdir="TB"
рейтинг сверху вниз. Вертикальное упорядочение выполняется по рангу в зависимости от видимых или невидимых ребер. rank="same"
может понадобиться, если есть горизонтальные края.