Alignement du graphique

Sep 20 2020

Je suis nouveau sur tikz et j'ai fait quelques exercices. Je suis venu à travers un exemple de petit réseau bayésien dans le livre " Probabilistic Graphical Models " et j'ai pensé essayer de dessiner. Le graphssemblait le meilleur choix dans lequel les noeuds sont définis en les connectant , mais le module met tous les nœuds de manière un peu bizarre. Voici l'image

et voici le 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}

Je pense comprendre ce qui se passe. Le nœud GJest simplement poussé à droite pour créer de l'espace pour le reste de l'arbre. Je me demandais s'il existe un moyen de rendre le graphique plus compact, avec chaque niveau aligné horizontalement. Aussi, je me demandais comment pourrais-je décaler (horizontalement, verticalement) certains groupes de nœuds pour exprimer la logique dans le graphique; Les G (X) doivent être au même niveau et les B (X) doivent être inférieurs.

La présentation graphique appropriée est ci-dessous et j'ai utilisé une combinaison de matrixet graphs, ce dont je ne suis pas entièrement satisfait car cela contredit l'utilité du graphsmodule lui-même.

Merci.

Réponses

1 Evion Sep 20 2020 at 21:27

Passez l' Layered layoutoption, ne préféreriez-vous pas des formes circulaires pour les nœuds?, Prenez note des paquets et compilez avec Lualatex comme recommandé dans pgfmanual / tikz. :)

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