圖形對齊

圖形對齊

我是 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}

相關內容