假设我有一个这样的三角形,它可以很容易地由 pgf 生成。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
vertex/.style={circle, draw=blue!60, fill=blue!40, minimum size=2mm},
line/.style = {draw, thick}
]
\newcommand\mylength{30mm}
\coordinate (A) at ( 90: \mylength);
\coordinate (B) at (210: \mylength);
\coordinate (C) at (-30: \mylength);
\path [line] (A) -- (B);
\path [line] (B) -- (C);
\path [line] (C) -- (A);
\node [vertex] at (A) {1};
\node [vertex] at (B) {2};
\node [vertex] at (C) {3};
\end{tikzpicture}
\end{document}
这是我想要绘制的图表:
1
/ \
/ \
2-----3
/ \
/ \
1 1
\ \
\ \
2-----3 3
有些人可能会注意到,这幅画是关于一个删除-收缩复发. 顶部节点的一个三角形分解为两个子图:
- 左孩子由删除边缘 1-2
- 正确的孩子是通过承包一条边 1-2,通过将两个端点 1 和 2 合并为“新 1”节点,然后删除多条边,该边缩小为一个点。
我想让这个过程一直持续下去,直到树达到更小的图,这样最终的输出就会大得多。即使对于深度为 1 的小树,我也不知道绘制这种树的最佳方法是什么。有什么提示或建议吗?
添加: 我在这个例子中使用了三角形,因为它是可以用作示例的最简单的图形。感兴趣的图形可以是任何随意的图形,我更喜欢将每个图形包裹在某种“节点”或“盒子”中,然后将每个容器节点连接起来作为树中的节点。最好的方法是什么?
抱歉造成任何混淆。
答案1
也许您可以将每个图定义为TikZ
pic
。每个图都pic
可以是您想要的任何东西。如果您在其中使用节点,由于 pic 的名称空间对于每个 pic 都是独立的并且所有名称都会被记住,因此很容易将它们连接起来。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,shapes,positioning,trees}
\tikzset{
vertex/.style = {circle, draw=blue!60, fill=blue!40, minimum size=2mm},
all/.pic={
\node[vertex] (-1) {1};
\node[vertex, below left=1cm and 5mm of -1] (-2) {2};
\node[vertex, below right=1cm and 5mm of -1] (-3) {3};
\draw(-1)--(-2)--(-3)--cycle;
},
left/.pic={
\node[vertex] (-1) {1};
\node[vertex, below left=1cm and 5mm of -1] (-2) {2};
\node[vertex, below right=1cm and 5mm of -1] (-3) {3};
\draw(-1)--(-3)--(-2);
},
right/.pic={
\node[vertex] (-1) {1};
\node[vertex, below right=1cm and 5mm of -1] (-3) {3};
\draw(-1)--(-3);
},
}
\begin{document}
\begin{tikzpicture}
\pic (A) at (0,0) {all};
\pic (B) at (-2,-3) {left};
\pic (C) at (2,-3) {right};
\draw (A-2)--(B-1);
\draw (A-3)--(C-1);
\end{tikzpicture}
\end{document}
答案2
使用 Tikz 的解决方案。
输出
代码
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,shapes,positioning,trees}
\tikzset{
vertex/.style = {circle, draw=blue!60, fill=blue!40, minimum size=2mm}
}
\begin{document}
\begin{tikzpicture}[%
no edge from this parent/.style={
edge from parent/.style={draw=none}},
level 1/.style={sibling distance=2cm},
level 2/.style={sibling distance=2cm},
level distance=2cm]
\node[vertex] (n1) {1}
child {node[vertex] (n2) {2}
child{node[vertex] (n4) {1}
child[no edge from this parent]{node[vertex] (n5) {2}}
child{node[vertex] (n6) {3}}
}
child[no edge from this parent]{node {}}
}
child {node[vertex] (n3) {3}
child[no edge from this parent]{node {}}
child{node[vertex] {1}
child[no edge from this parent]{node {}}
child{node[vertex] (n9) {3}}
}
};
\draw (n2) -- (n3);
\draw (n5) -- (n6);
\end{tikzpicture}
\end{document}