代码

代码

我已经尝试画一些东西一段时间了,但似乎找不到按照自己想要的方式去做。我想画一些类似的东西:

(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}

树弧

相关内容