
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. graphs
Parecí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
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 GJ
simplemente 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 matrix
y graphs
, lo cual no estoy del todo satisfecho porque de alguna manera anula la utilidad del graphs
módulo en sí.
Gracias.
Respuesta1
Pasa la Layered layout
opció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}