我是 tikz 的新手,一直在做一些练习。我在书中看到了一个小贝叶斯网络的例子“概率图模型“我想试着画一下。graphs
通过连接节点来定义节点似乎是最好的选择,但模块将所有节点的放置方式有些奇怪。这是图片
代码如下:
\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}
我想我明白发生了什么。节点GJ
只是被推到右边,为树的其余部分腾出空间。我想知道是否有办法让图更紧凑,每个级别水平对齐。另外,我想知道如何移动(水平、垂直)一些节点组来表达图中的逻辑;G(X) 应该在同一级别,B(X) 应该在下面。
正确的图形布局如下,我使用了matrix
和的组合graphs
,但我并不完全满意,因为它有点破坏了模块本身的实用性graphs
。
谢谢。
答案1
通过Layered layout
选项,您不喜欢圆形的节点吗?,记下软件包并按照 pgfmanual/tikz 中的建议使用 Lualatex 进行编译。:)
\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}