Impossibile stampare l'etichetta e la casella delineata di un sottografo del cluster in graphviz
-
12-12-2019 - |
Domanda
Sono un principiante a Graphviz e il linguaggio del punto. Stavo provando a generare grafici con subgprah di cluster. Tuttavia, quando ho cluster, ognuno con le posizioni del nodo esattamente specificata nello script, Graphviz non genera le caselle di contorno o le etichette per i cluster! In particolare, se ho il seguente script DOT:
digraph G{
subgraph cluster0{
label="Cluster 0"
a->b
}
subgraph cluster1{
label="Cluster 1"
c->d
}
}
.
Quindi il grafico generato è:
Tuttavia, con il seguente dot script, in cui specifico le posizioni del nodo dei 4 nodi esattamente:
digraph G{
subgraph cluster0{
label = "Cluster 0"
a[pos="10,200"]
b[pos="100,200"]
a->b
}
subgraph cluster1{
label = "Cluster 1"
c[pos="10,100"]
d[pos="100,100"]
c->d
}
}
.
Il grafico generato è:
Si noti che in questo caso, né la scatola del contorno per i cluster né le etichette per i cluster sono stampati !! In questo caso, c'è una chiara demarcazione tra i 2 cluster come puoi vedere - i cluster non si sovrappongono, quindi in linea di principio graphviz non dovrebbe avere un problema mostrandoli, ho ragione?
Come posso dire a Graphviz di disegnare le scatole e le etichette del cluster del cluster, non importa cosa? Qualsiasi aiuto in questo sarà molto apprezzato !!
Grazie!
Soluzione
Il motore di layout DOT non supporta l'attributo pos
.
Per rendere un grafico con posizioni di tutti i nodi predefiniti, è necessario utilizzare neato
o fdp
con l'opzione -n
.
neato
non supporta i cluster (anche se Sembra che ora dovrebbe ). Fortunatamente, fdp
does!
Pertanto, è possibile utilizzare il seguente comando:
dot -Tpdf -Kpdf -n -O filename.dot
.
o
fdp -Tpdf -n -O filename.dot
.
Sfortunatamente, le posizioni dei nodi relativi al cluster sono ok, ma i cluster sembrano ancora spostarsi da FDP (l'interruttore -n
non ha fatto la differenza).
Non ho provato con l'ultima versione (ho usato 2.29.20120504), ma se l'ultima non funziona né né, questo potrebbe essere un caso per un rapporto di bug.
BTW, poiché si presume che le posizioni siano in pollici, ciò creerà un grafico molto grande.
.
Uscita Io ottengo con FDP (con o senza interruttore -n
) - Ho aggiunto size=20
per limitare la dimensione dell'immagine:
.
Soluzione alternativa senza utilizzare pos
:
digraph G{
subgraph cluster0{
label = "Cluster 0"
{rank=same; a->b;}
}
subgraph cluster1{
label = "Cluster 1"
{rank=same; c->d; }
}
a -> c [style=invis];
}
. Altri suggerimenti
Il tuo codice è rendering fine in svg su viz.js .Sono in grado di vedere i bordi intorno ai cluster.
Forse la versione Graphviz che si utilizza è vecchia, un aggiornamento dovrebbe risolvere il problema.