森林列对齐/格式化

森林列对齐/格式化

我正在尝试创建两棵树来描述两个视觉上对齐的实验,但第二张图 (M2) 的类别少 1 个。如果我仅删除第 4 个类别,它会移动整个第 4 列,并重新定位第二棵树,这不是我想要的。我想要以下内容:

  1. 移除第二棵树中的第 4 个框“果实类型”,但保持该列与第一棵树对齐。
  2. 确保“结果”列下的所有框(第一棵树和第二棵树) (a) 宽度相同,并且 (b) 对齐。目前,第二棵树中的框随着包含 N 个观察值而具有不同的宽度大小,我怀疑如果我在里面放入较长的文本,它甚至可能会扰乱与第一棵树的对齐。

期望的结果:

在此处输入图片描述

我不要的是:

在此处输入图片描述

以下是当前代码:

\documentclass{article}

\usepackage{forest}
\useforestlibrary{edges}
\usetikzlibrary {decorations.pathreplacing, calligraphy}
\tikzset{mybrace/.style={decorate, decoration={calligraphic brace, amplitude=2mm}, ultra thick, transform canvas={xshift=1mm}}}

\begin{document}

\begin{figure}
\centering
\caption{Experimental Conditions and the Number of Observations}
\medskip

\newcommand*{\equal}{=}

% tier/.pgfmath=level()
\begin{forest}
for tree={grow'=east, if level=0{l sep=-5mm}{if n children=0{minimum width=28mm}{minimum width=28mm}}}
[
    [Versions, for tree={no edge, draw}[fruit type[outcome[fruit type]]]
    ]
    [M1, no edge, for descendants={forked edge, draw}
        [Apple[cheap[Apple (N{\equal}60), name=A1][Banana (N{\equal}67)]][expensive[Apple (N{\equal}74)][Banana (N{\equal}84)]]]
        [Banana[cheap[Apple (N{\equal}80)][Banana (N{\equal}84)]][expensive[Apple (N{\equal}84)][Banana (N{\equal}73), name=B1]]]
    ]]
\end{forest}

\medskip
\medskip
\medskip
\begin{forest}
for tree={grow'=east, if level=0{l sep=-5mm}{if n children=0{minimum width=28mm}{minimum width=28mm}}}
[
    [Versions, for tree={no edge, draw}[fruit type[outcome[fruit type]]]
    ]
    [M2, no edge, for descendants={forked edge, draw}
        [Apple[cheap(N{\equal}144)][expensive(N{\equal}171)]]
        [Banana[cheap(N{\equal}161)][expensive(N{\equal}133)]]
    ]]
\end{forest}

\end{figure}
\end{document}

谢谢大家的建议。

答案1

我稍微整理了一下你的树。结果如下。

  • 您可以将两棵树合并为一棵,根节点为空。然后对齐将自动完成。
  • 您可以minimum width为每个级别选择,或者只使用足够大的级别,以便所有节点都相等。
  • 除了定义之外,\equal您还可以将节点内容括在{...}
  • fit=rectangle将防止子树垂直重叠。
  • delay={content=#1\strut}, inner ysep=2pt将向每个节点添加\strut,以便它们都具有相同的高度。然后您可以调整inner ysep以获得所需的高度。
  • 对于下方的树,添加before drawing tree={y-=10mm}以增加额外的垂直空间。

在此处输入图片描述

\documentclass{article}

\usepackage{forest}
\useforestlibrary{edges}

\begin{document}

\begin{figure}
\centering
\caption{Experimental Conditions and the Number of Observations}
\medskip

\begin{forest}
for tree={
    grow'=east,
    forked edge, 
    delay={content=#1\strut}, inner ysep=2pt,
    if level=1{no edge, minimum width=18mm}{draw, if level=2{minimum width=18mm}{if level=3{minimum width=31mm}{minimum width=40mm}}}
}
[, coordinate
    [Versions, for tree={no edge, draw}[fruit type[outcome[fruit type]]]
    ]
    [M1, fit=rectangle
        [Apple[cheap[{Apple (N=60)}, name=A1][{Banana (N=67)}]][expensive[{Apple (N=74)}][{Banana (N=84)}]]]
        [Banana[cheap[{Apple (N=80)}][{Banana (N=84)}]][expensive[{Apple (N=84)}][{Banana (N=73)}, name=B1]]]
    ]
    [M2, fit=rectangle, for tree={before drawing tree={y-=10mm}}
        [Apple[{cheap(N=144)}][{expensive(N=171)}]]
        [Banana[{cheap(N=161)}][{expensive(N=133)}]]
    ]
]
\end{forest}

\end{figure}
\end{document}

相关内容