图形对齐

图形对齐

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

相关内容