Graphausrichtung

Graphausrichtung

Ich bin neu bei tikz und habe einige Übungen gemacht. Ich bin auf ein Beispiel für ein kleines Bayes-Netzwerk im Buch "Probabilistische grafische Modelle" und dachte, ich würde versuchen zu zeichnen. Das graphsschien die beste Wahl zu sein, bei der Knoten durch Verbinden definiert werden, aber das Modul platziert alle Knoten auf etwas seltsame Weise. Hier ist das Bild

Bildbeschreibung hier eingeben

und hier ist der Code:

\documentclass{standalone}
\usepackage[utf8]{inputenc}
%\usepackage[margin=1cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, graphs, matrix, shapes.geometric}

\begin{document}
\begin{tikzpicture}
        \graph[grow down, grow down sep=3mm, branch right=2.5cm,
        edges={>=Latex, semithick, color=black},
        nodes={draw, ellipse, fill=black!10, very thick,
        minimum width=2cm, minimum height=10mm}] {
        GC -> {
            BC -!- GH -> {
                BH,
                GB -> BB,
                GL -> BL,
                GN -> BN,
            },
            GM -> {
                GB,
                GL,
                GN,
                BM,
            },
            GS -> BS,
        },
        GJ -> {
            GM,
            GS,
            BJ,
        },
    };
    \end{tikzpicture}
\end{document}

Ich glaube, ich verstehe, was passiert. Der Knoten GJwird einfach nach rechts verschoben, um Platz für den Rest des Baums zu schaffen. Ich habe mich gefragt, ob es eine Möglichkeit gibt, das Diagramm kompakter zu machen, indem jede Ebene horizontal ausgerichtet wird. Außerdem habe ich mich gefragt, wie ich einige Knotengruppen (horizontal, vertikal) verschieben könnte, um die Logik im Diagramm auszudrücken; G(X)s sollten auf derselben Ebene sein und B(X)s darunter.

Das richtige Diagrammlayout ist unten dargestellt und ich habe eine Kombination aus matrixund verwendet graphs, mit der ich nicht ganz zufrieden bin, da es die Nützlichkeit des Moduls selbst irgendwie zunichte macht graphs.

Bildbeschreibung hier eingeben

Danke.

Antwort1

Übergeben Sie die Layered layoutOption. „Würden Sie nicht lieber kreisförmige Formen für die Knoten haben?“, beachten Sie die Pakete und kompilieren Sie mit Lualatex, wie in pgfmanual/tikz empfohlen. :)

\documentclass{standalone}
\usepackage[utf8]{inputenc}
%\usepackage[margin=1cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, graphs,graphdrawing, shapes.geometric }
\usegdlibrary{layered}
\begin{document}

%Compile with luaLatex
\begin{tikzpicture}
   
        \graph[
          layered layout, 
          sibling distance =3cm, 
          level distance =3cm, 
          edges={>=Latex, semithick, color=black},
          nodes={draw, ellipse, fill=black!10, very thick,
         minimum width=2cm, minimum height=10mm}
         ]
        {
        GC -> {
            BC -!- GH -> {
                BH,
                GB -> BB,
                GL -> BL,
                GN -> BN,
            },
            GM -> {
                GB,
                GL,
                GN,
                BM,
            },
            GS -> BS,
        },
        GJ -> {
            GM,
            GS,
            BJ,
        },
    };
    \end{tikzpicture}
\end{document}

verwandte Informationen