我已经尝试画一些东西一段时间了,但似乎找不到按照自己想要的方式去做。我想画一些类似的东西:
(1) ACGT
|
----------
| |
(2) ACGT ACGT
|
-----------
| |
(3) ACGT ACGT ACGT
|
------------
| |
(4) ACGT ACGT ACGT ACGT
理想情况下,每条线都应居中。我非常希望有一个不需要任何绝对定位的解决方案。我尝试过各种软件包,如 qtree 和 tikz,但似乎无法得到我想要的 :)。我所缺少的是如何使 TikZ 节点居中。
感谢您的帮助!
答案1
TikZ 树解决方案:
代码
\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\begin{tikzpicture}
\tikzset{
edge from parent fork down,
level/.style={sibling distance=2cm},
}
\node{ACGT}
child{node{ACGT}
child{node{ACGT} edge from parent[draw=none]
child{node{ACGT} edge from parent[draw=none]}
child[missing]
}
child[missing]
}
child{node{ACGT}
child{node{ACGT}
child{node{ACGT}}
child{node{ACGT}}
}
child{node{ACGT}
child[missing]
child{node{ACGT} edge from parent[draw=none]}
}
}
;
\end{tikzpicture}
\end{document}
输出
答案2
原来弧线不止一种,一种是通过“to[out=angle,in=angle,relative]”实现的。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[out=45,in=135,relative]%controls to-arc
\coordinate (A) at (0,0);
\coordinate (B) at (2,0);
\draw (A) to coordinate[pos=0,5](C) (B);%places C midway berween A & B on arc
\fill (C) circle (2pt);
\node[above] at (C) {midway};
\end{tikzpicture}
\end{document}
如果您反对使用绝对坐标,这应该可以帮助您入门。
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate(hgap) at (1,0);% horizontal spacing
\coordinate(vgap) at (0,1.5);% vertical spacing
\path
node(r4label){(4)}
(r4label.east) +(hgap) node(r4c1){ACGT}
(r4c1.east) +(hgap) node(r4c2){ACGT}
(r4c2.east) +(hgap) node(r4c3){ACGT}
(r4c3.east) +(hgap) node(r4c4){ACGT}
(r4label) +(vgap) node{(3)}
($(r4c1)!0.5!(r4c2)$) +(vgap) node(r3c1){ACGT};
\end{tikzpicture}
\end{document}
实际上,我更喜欢其他(树)解决方案。如果您仍然想要弧线,则可以使用:
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\begin{tikzpicture}
[every node/.style={draw=black},
edge from parent/.style={draw=none}]
\node(top) {root}
child {node(left) {left}}
child {node(right) {right}};
\draw
(top.south) to[out=0,in=90] (right.north)
(top.south) to[out=180,in=90] (left.north);
\end{tikzpicture}
\end{document}