Ich bin zutiefst davon überzeugt, dass graphviz sollte nicht auf diese Weise verwendet werden, aber Sie können HTML labels verwenden, um zu erreichen, was Sie wollen:
digraph {
Foo -> Bar -> Test;
Foo -> Baz -> Test;
{ rank = sink;
Legend [shape=none, margin=0, label=<
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
<TR>
<TD COLSPAN="2"><B>Legend</B></TD>
</TR>
<TR>
<TD>Foo</TD>
<TD><FONT COLOR="red">Foo</FONT></TD>
</TR>
<TR>
<TD>Bar</TD>
<TD BGCOLOR="RED"></TD>
</TR>
<TR>
<TD>Baz</TD>
<TD BGCOLOR="BLUE"></TD>
</TR>
<TR>
<TD>Test</TD>
<TD><IMG src="so.png" SCALE="False" /></TD>
</TR>
<TR>
<TD>Test</TD>
<TD CELLPADDING="4">
<TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0">
<TR>
<TD BGCOLOR="Yellow"></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
>];
}
}
Das ist, wie das aussieht:
Die Positionierung der Legende muss wie jeder andere Knoten getan werden (ich habe rank = sink verwendet, um es zu bekommen nach unten) - Sie können mit dem Attribut margin
spielen, um die Position zu optimieren.
bearbeiten:
Ohne Etiketten verwendet wird, dass die Richtung zu gehen sein kann - ich bin nicht sicher, ob es ranksep
vollständig zu beseitigen ist.
digraph {
mindist=0;
ranksep=0;
nodesep=0;
node[shape=box,margin="0,0",width=1, height=0.5];
edge [style=invis];
Legend[width=2];
Legend -> Foo;
Legend -> FooValue;
Foo -> Bar;
FooValue -> BarValue
Bar -> Baz;
BarValue -> BazValue;
edge [constraint=false];
Foo -> FooValue;
Bar -> BarValue
Baz -> BazValue;
}
in Resultierende:
dass in Bezug auf das Layout sieht gut aus, aber es erfordert manuell jedes Element in der Tabelle mit den vorhandenen Knoten Objekte im Gegensatz eingeben. Mein Versuch versuchte Subgraphen und Cluster, aber beide waren nicht zuverlässig genug, um das Layout der Tabelle zu steuern (ich verstehe, dass die Engine verantwortlich ist für die Entscheidung über das optimale Layout eines normalen Graphen, aber eine Tabelle ist einfach zu Layout optimal, keine Phantasie Berechnung sollte benötigt werden, ein Rechteck ist einfach genug). – Synetech
Mir war nicht bewusst, dass die Legende aus Knoten bestehen musste - ich aktualisierte die Antwort mit einem Beispiel in diese Richtung, ohne Erfolg, zumindest wenn Sie die Gitterlinien brauchen. Ich glaube nicht, dass das, was Sie erhalten möchten, auch mit ausgefallenen Berechnungen möglich ist. Andere Werkzeuge können für diese Aufgabe besser geeignet sein. – marapet
**> Ich war mir nicht bewusst, dass die Legende aus Knoten bestehen musste. Nun, die Legende handelt von der Grafik, und die Grafik besteht aus Knoten und Linien. **> Ich glaube nicht, dass das, was Sie erhalten möchten, auch mit ausgefallenen Berechnungen möglich ist. Andere Werkzeuge könnten für diese Aufgabe besser geeignet sein. ** Das wäre bedauerlich; Es ist seltsam, dass ein Graphik-Dienstprogramm keinen entscheidenden Teil eines Graphen darstellen kann. :( – Synetech