
Sou novo no tikz e tenho feito alguns exercícios. Encontrei um exemplo de pequena rede bayesiana no livro "Modelos Gráficos Probabilísticos"e pensei em tentar desenhar. graphs
Parecia a melhor escolha onde os nós são definidos conectando-os, mas o módulo posiciona todos os nós de uma maneira um tanto estranha. Aqui está a imagem
e aqui está o 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}
Acho que entendo o que está acontecendo. O nó GJ
é simplesmente empurrado para a direita para criar espaço para o resto da árvore. Fiquei me perguntando se existe uma maneira de tornar o gráfico mais compacto, com cada nível alinhado horizontalmente. Além disso, eu queria saber como poderia mudar (horizontalmente, verticalmente) alguns grupos de nós para expressar a lógica no gráfico; G(X)s devem estar no mesmo nível e B(X)s devem estar abaixo.
O layout do gráfico adequado está abaixo e usei a combinação de matrix
e graphs
, o que não estou totalmente satisfeito porque isso acaba com a utilidade do graphs
próprio módulo.
Obrigado.
Responder1
Passe a Layered layout
opção Você não preferiria formas circulares para os nós?, anote os pacotes e compile com Lualatex conforme recomendado em 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}