Alineación de gráficos

Alineación de gráficos

Soy nuevo en tikz y he estado haciendo algunos ejercicios. Me encontré con un ejemplo de una pequeña red bayesiana en el libro "Modelos gráficos probabilísticos" y pensé en intentar dibujar. graphsParecía la mejor opción donde los nodos se definen conectándolos, pero el módulo coloca todos los nodos de una manera un tanto extraña. Aquí está la imagen

ingrese la descripción de la imagen aquí

y aquí está el código:

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

Creo que entiendo lo que está pasando. El nodo GJsimplemente se empuja hacia la derecha para crear espacio para el resto del árbol. Me preguntaba si hay alguna manera de hacer que el gráfico sea más compacto, con cada nivel alineado horizontalmente. Además, me preguntaba cómo podría desplazar (horizontal y verticalmente) algunos grupos de nodos para expresar la lógica en el gráfico; Los G(X) deben estar en el mismo nivel y los B(X) deben estar por debajo.

El diseño gráfico adecuado se encuentra a continuación y utilicé la combinación de matrixy graphs, lo cual no estoy del todo satisfecho porque de alguna manera anula la utilidad del graphsmódulo en sí.

ingrese la descripción de la imagen aquí

Gracias.

Respuesta1

Pasa la Layered layoutopción, ¿No preferirías formas circulares para los nodos?, toma nota de los paquetes y compila con Lualatex como se recomienda en 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}

información relacionada