Выравнивание графика

Выравнивание графика

Я новичок в 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опцию, не предпочли бы вы круглые формы для узлов?, обратите внимание на пакеты и скомпилируйте с Lualatex, как рекомендовано в 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}

Связанный контент