重新创建混合布局树形图

重新创建混合布局树形图

我正在尝试从一本书中重新创建下图:

原始图表-一棵树

我尝试使用 tikz 的graphdrawing包:

\documentclass{standalone}
\usepackage{tikz} 

\usetikzlibrary {graphs, quotes, graphdrawing} \usegdlibrary{trees}
%\usetikzlibrary {arrows.meta,graphs,graphdrawing} \usegdlibrary {layered}

\begin{document} 
\begin{tikzpicture}
 \graph [
 tree layout, 
% layered layout,
 grow down, branch right, 
 nodes={circle ,draw, minimum size=.65cm, inner sep=0pt, very thick},
 level/.style={
  sibling distance = .15cm,
  sibling sep = 0.25cm,
  level distance = 0cm,
  level sep = 0.1cm  
  }, 
 level 3/.style={
  sibling distance = .0cm,
  sibling sep = 0.6cm,
  level distance = 0cm,
  level sep = 0.1cm  
  }  
 ] {
1--2--{3,4--{6,7},5--{8--{10,11},9}}
 };
\end{tikzpicture}
 
\end{document}

首先尝试树布局引擎:

在此处输入图片描述

然后我尝试了分层布局引擎:

在此处输入图片描述

它们非常接近,但都没有达到预期效果。原始布局似乎是两者的混合。请注意,以 5 为根的子图是如何布局为二叉树的,而 1-2-4 链则是使用分层布局得到的。

我还注意到,在原始版本中,节点 4 的位置比其兄弟节点略低。而在分层布局中,由于某种原因,在级别 3 中使用不同的兄弟节点分隔会使节点 4 相对于节点 2 略微偏离中心。

庞大的 tikz 手册没有告诉我如何:

  1. 每个节点的控制级别预距离
  2. 在布局之间切换(可能不可行),或者
  3. 或者,手动轻推最左边的子节点,以便树的其余部分正确对齐。

感谢提供建议(包括使用除 tikz 之外的 illustrator 以外的其他工具更轻松地实现此目的)

答案1

如果您可以考虑使用forest,那么这个任务相当简单。您只需更改calign树中的 即可。在此示例中,我们可以设置

for tree={calign child=2}

(或calign=last在此示例中)在从 开始的子树中4

\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={circle, minimum size=.65cm, inner sep=0pt,draw,thick} 
 [1
  [2
   [3]
   [4,for tree={calign child=2}
    [5]
    [6]
   ]
   [5
    [8
     [10]
     [11]
    ]
    [9]
   ]
  ]
 ]
\end{forest}
\end{document}

在此处输入图片描述

2具有垂直对齐和节点的另一个版本4

\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={circle, minimum size=.65cm, inner sep=0pt,draw,thick} 
 [1
  [2
   [3]
   [4,for tree={calign child=2},for current={calign with current edge}
    [5]
    [6]
   ]
   [5
    [8
     [10]
     [11]
    ]
    [9]
   ]
  ]
 ]
\end{forest}
\end{document}

在此处输入图片描述

答案2

感谢@user238301 建议使用该forest包,我能够重新创建精确的布局。

请注意原始布局的细节:

  • 2 但必须位于 3 和 5 之间
  • 4-7 必须直接与 1-2 对齐
  • 6 和 7 必须向左“推”,以便 7 位于 4 下方,而 8 和 9 必须对称地放置在 5 周围(及下方)

做好这件事比想象的要难。

以下是复制品和原始品的并排对比(哪个是哪个?:-)):

在此处输入图片描述 在此处输入图片描述

代码如下:

\documentclass{article} 
\usepackage{forest} 
\begin{document} 
\begin{forest}
for tree={circle, minimum size=.65cm, inner sep=0pt,draw, very thick,edge={line width=1.5pt}}
 [1,for tree={l sep=0.15cm, l=0cm}
  [2,calign=center, for tree={l sep=0.05cm, s sep=0.3cm}
   [3]
   [4, before computing xy={s=0mm},for tree={calign=last, s sep=0.05cm}
    [6]
    [7]
   ]
   [5,for tree={calign=center, s sep=0.05cm}
    [8
     [10]
     [11]
    ]
    [9]
   ]
  ]
 ]
\end{forest}
\end{document}
\end{document}

相关内容