
我是 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
選項,您不喜歡節點的圓形形狀嗎? :)
\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}