
Ich verwende das tree layout
mit Tikz, was im Allgemeinen sehr gut funktioniert, aber manchmal, wenn ich Untergraphen verwende, lande ich bei Kanten, die perfekt übereinander ausgerichtet sind, wie hier:
In meinem Code unten habe ich auch verschiedene andere Layoutmethoden ausprobiert, wie spring layout
die elektrischen Varianten. Aber sie scheinen ebenfalls Probleme mit verschachtelten Layouts zu haben, und die Kräfte breiten sich nicht gut durch die Ebenen aus. Dies führt zu einer Reihe von Knoten, die übereinander gestapelt sind.
Gibt es einen Trick, mit dem ich Layouts mit verschachtelten Layouts kombinieren kann?
\documentclass[tikz]{standalone}
\usetikzlibrary{graphs, graphdrawing, quotes, arrows.meta}
\usegdlibrary{trees}
\begin{document}
\tikz[
every node/.style={
font=\scriptsize,
inner sep=2pt,
},
identity/.style={circle, draw=black, fill=white, inner sep=0pt, minimum size=4pt},
var/.style={circle, draw=black, fill=white, inner sep=2pt},
function/.style={circle, draw=black, fill=white, inner sep=2pt},
subgraph nodes={draw=gray, rounded corners},
subgraph text none,
]
\graph [
tree layout,
grow'=right,
fresh nodes,
sibling sep=5em,
node distance=1cm,
node sep=1cm,
nodes behind edges,
nodes={align=center},
] {
main+cluster [draw=black, circle] // [tree layout]{
sub+cluster // [tree layout]{
node+A[function,as=$A$];
node+x1[var,as=$x$];
(node+x1) -> [-latex, "$i$"] (node+A);
},
node+x2[var,as=$x$];
(node+A) -- ["$i$"] (node+x2);
},
node+j[as=];
(node+A) -- ["$j$"] (node+j);
node+i+prime[as=];
(main+cluster) -- [Circle-, "$i'$"] (node+i+prime);
};
\end{document}
Antwort1
Hier ein Vorschlag, ich habe den x
Knoten mit nach unten verschoben nudge down =5mm
und den Pfeil mit gebogen out=-80,in=230,looseness=1.4
. Du kannst diese Einstellungen ändern, um es möglichst genau deinen Vorstellungen anzupassen.
node+x2[var,nudge down=5mm,as=$x$];
(node+A) -- [out=-80,in=230,looseness=1.4,"$i$"] (node+x2);
Der vollständige Code
\documentclass[tikz]{standalone}
\usetikzlibrary{graphs, graphdrawing, quotes, arrows.meta}
\usegdlibrary{trees}
\begin{document}
\tikz[
every node/.style={
font=\scriptsize,
inner sep=2pt,
},
identity/.style={circle, draw=black, fill=white, inner sep=0pt, minimum size=4pt},
var/.style={circle, draw=black, fill=white, inner sep=2pt},
function/.style={circle, draw=black, fill=white, inner sep=2pt},
subgraph nodes={draw=gray, rounded corners},
subgraph text none,
]
\graph [
tree layout,
grow'=right,
fresh nodes,
sibling sep=5em,
node distance=1cm,
node sep=1cm,
nodes behind edges,
nodes={align=center},
] {
main+cluster [draw=black, circle] // [tree layout]{
sub+cluster // [tree layout]{
node+A[function,as=$A$];
node+x1[var,as=$x$];
(node+x1) -> [-latex, "$i$"] (node+A);
},
node+x2[var,nudge down=5mm,as=$x$];
(node+A) -- [out=-80,in=230,looseness=1.4,"$i$"] (node+x2);
},
node+j[as=];
(node+A) -- ["$j$"] (node+j);
node+i+prime[as=];
(main+cluster) -- [Circle-, "$i'$"] (node+i+prime);
};
\end{document}