테스트된 tikz 그래프를 사용한 레이아웃

테스트된 tikz 그래프를 사용한 레이아웃

나는 tree layout일반적으로 매우 잘 작동하는 with tikz를 사용하고 있지만 때로는 하위 그래프를 사용할 때 다음과 같이 서로 완벽하게 정렬되는 가장자리로 끝납니다.

여기에 이미지 설명을 입력하세요

spring layout아래 코드에서는 전기 변형과 같은 다양한 다른 레이아웃 방법도 시도했습니다 . 그러나 마찬가지로 중첩된 레이아웃에 문제가 있는 것으로 보이며 힘이 레벨을 통해 잘 전파되지 않습니다. 이로 인해 여러 개의 노드가 서로 뭉쳐지게 됩니다.

중첩된 레이아웃을 사용하여 레이아웃을 가져오는 데 필요한 트릭이 있나요?

\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}

답변1

x여기에 제안이 있습니다. 로 노드를 아래로 이동 nudge down =5mm하고 로 화살표를 구부렸습니다 out=-80,in=230,looseness=1.4. 이러한 설정을 변경하여 아이디어에 최대한 가깝게 조정할 수 있습니다.

node+x2[var,nudge down=5mm,as=$x$];
(node+A) -- [out=-80,in=230,looseness=1.4,"$i$"] (node+x2);

전체 코드

\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}

여기에 이미지 설명을 입력하세요

관련 정보