Attualmente sto scrivendo una libreria di grafi in Java e vorrei uno strumento per visualizzare alcuni grafici. Ho scoperto Graph-viz, che sembra essere un ottimo modo di fare questo, anche se buggy.Graphviz (xdot): come creare nodi ricorsivi?
Nel mio modello, Grafici sono composti da nodi e bordi. Ogni nodo hanno un certo numero di Ports (I/O/IO) e Bordi link di quei Ports insieme. Alcuni nodi speciali sono chiamati GraphNodes e incorporano un grafico. Le porte di questi GraphNodes sono mappati alcuni porte degli interni Nodi.
Mi piacerebbe fornire diverse rappresentazioni. Il primo di essi, con la quale sono soddisfatto, è la seguente: http://i.stack.imgur.com/ujU71.png
l'ingresso Porte sono rappresentati in verde, quelle di uscita in rosso, e quelli di ingresso-uscita in blu.
In questa rappresentazione, le GraphNodes non vengono espansi e vengono visualizzati altrettanto semplice Nodi. In una seconda versione, vorrei creare qualcosa che assomigli alla seguente immagine: http://i.stack.imgur.com/Cx624.png
Il problema è che non riesco a creare un sottogramma (cluster) con aree fisse (sembra non essere possibile). Un'altra soluzione che ho provato è stata incorporare un grafico in un nodo. Tuttavia, l'inserimento del codice nella <td> </td>
parte di un'etichetta HTML non valuta il codice:
digraph graph0
{
node1
[
label =
<
<table border="0" cellspacing="0">
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td bgcolor="palegreen" border="1" port="port2">port2</td>
<td bgcolor="palegreen" border="1" port="port3">port3</td>
</tr>
</table>
</td>
</tr>
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td bgcolor="skyblue" border="1" port="port5">port5</td>
</tr>
</table>
</td>
<td bgcolor="peachpuff" border="1">
subgraph clusterTest
{
nodeTest
}
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td cellpadding="0">
<table border="0" cellspacing="0">
<tr>
<td bgcolor="lightpink" border="1" port="port4">port4</td>
</tr>
</table>
</td>
</tr>
</table>
>
style = "invisible"
]
}
Il codice precedente crea grafico seguente: http://i.stack.imgur.com/E9jQ1.png
Infine, la soluzione migliore che può venire in mente è il seguente: http://i.stack.imgur.com/VzS5g.png
Tuttavia io non sono soddisfatto, perché i GraphNodes 'Ports sono collocati in posizioni strane a volte.
Per favore, so come posso raggiungere il layout del grafico di destinazione? Si prega di chiedere qualsiasi altra informazione se necessario.
EDIT: io ancora non ho trovato alcuna soluzione. Un modo per gestire questo sarebbe essere in grado di correggere la posizione dei nodi dati all'interno del cluster contenente, ma non sembra possibile con il layout "punto". Qualche idea ?
Sto facendo cadere questo in grembo, perché devo correre ora. Fatemi sapere se ci sono domande (dettagli) che posso aggiungere alla risposta ... –
Ciao! Grazie per la tua risposta, mi dispiace non averlo provato prima. Tuttavia non riesco a farlo funzionare. Sembra che Python stia fallendo l'attributo 'larghezza' dell'attore. Quale versione di Xdot usi per visualizzarla (la mia è 0.4)? O un altro morbido? Ad ogni modo, la tua risposta sembra perfetta per me! –
L'ho reso direttamente con graphviz. dot - graphviz versione 2.26.3 –