我一直在尝试重新创建这棵语言树,并尝试在 TiKz 中完成,但我也愿意接受其他解决方案。
但是,我不确定如何处理位于两个节点之间的水平箭头及其左侧的标签。
其次,我不确定最好的方法是让分支达到两级而不在中间插入节点。我改变了它的长度,但这会使兄弟距离有点不均匀。
第三,我的标签距离节点很远,我希望它们离节点更近一些。
这是我的最小工作示例。
\documentclass{article}
\usepackage{forest}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
level 1/.style={level distance=1cm,sibling distance=3cm},
level 2/.style={level distance=2cm,sibling distance=2cm},
level 3/.style={level distance=1.5cm,sibling distance=2cm}]
\tikzstyle{every node}=[circle,draw,fill,inner sep=0pt,minimum size=4pt]
\node (Root)[label=above:{\textsc{pucd}}] {}
child { node[label=left:{pre-\textsc{puc}}] {}
child { node[label=left:{\textsc{puc}}] {}
child { node[label=below:{Uwahaza}] {} }
child { node[label=below:{Cakaria}] {} }
} }
child { node[below=19mm,label=below:{Danundaga}] {} }
;
\end{tikzpicture}
\end{document}
答案1
纯tikz
溶液:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
level 1/.style={level distance=1cm,sibling distance=3cm},
level 2/.style={level distance=2cm,sibling distance=2cm},
level 3/.style={level distance=1.5cm,sibling distance=2cm},
V/.style = {circle, fill,inner sep=2pt}
]
\node (Root)[V,label=above:{\textsc{pucd}}] {}
child { node (A) [V,label=left:{pre-\textsc{puc}}] {}
child { node (B) [V,label=left:{\textsc{puc}}] {}
child { node[V,label=below:{Uwahaza}] {} }
child { node[V,label=below:{Cakaria}] {} }
}
}
child { node[V,below=19mm,label=below:{Danundaga}] {} }
;
\path (A) -- (B) node[pos=0.3] (p1) {} node[pos=0.5] (p2) {} node[pos=0.7] (p3) {};
\draw[dashed, <-] (p1) -- ++ (-1.2,0);
\draw[dashed, <-] (p2) -- ++ (-1.2,0) node[left, align=right] {?????\\influence};
\draw[dashed, <-] (p3) -- ++ (-1.2,0);
\end{tikzpicture}
\end{document}
您的图片上的箭头和文本难以辨认,也不清楚它们应该是什么样子。但是,在我的 MWE 中,它们的位置和文本可以轻松更改。
答案2
但是,我不确定如何处理位于两个节点之间的水平箭头及其左侧的标签。
唯一的问题是如何正确定位节点。要做到这一点,最简单的方法是为树中的节点添加名称,并使用标准的 tikz 定位方法来放置文本和箭头。
其次,我不确定最好的方法是让分支达到两级而不在中间插入节点。我改变了它的长度,但这会使兄弟距离有点不均匀。
即使在图中,节点也可以放在特定位置。使用child { node[right of=another node, xshift=2cm,...]...
将把节点放在与“另一个节点”相同的 Y 位置,无论它们在图中处于什么级别。
第三,我的标签距离节点很远,我希望它们离节点更近一些。
对于标签,您可以使用语法...,label={[below,yshift=1cm]{my label}}
来控制其垂直(或水平)位置。
\documentclass{article}
\usepackage{tikz}
\usepackage{forest}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[
level 1/.style={level distance=1cm,sibling distance=3cm},
level 2/.style={level distance=2cm,sibling distance=2cm},
level 3/.style={level distance=1.5cm,sibling distance=2cm}]
% \tikzstyle{every node}=[circle,draw,fill,inner sep=0pt,minimum size=4pt]
% include a scope to limit the default node style
\begin{scope}[every node/.style={circle,draw,fill,inner sep=0pt,minimum size=4pt}]
\node (Root)[label={[above,yshift=-0.2cm]{\textsc{pucd}}}] {}
child { node[label=left:{pre-\textsc{puc}}] (pre-puc) {}
child { node[label=left:{\textsc{puc}}] (puc) {}
child { node[label={[below,yshift=0.3cm]{Uwahaza}}] {} }
child { node[label={[below,yshift=0.3cm]{Cakaria}}] {} }
} }
child { node[right of=puc, xshift=2cm,label={[below,yshift=0.4cm]{Danundaga}}] {} }
;
\end{scope}
\node (non-og) at ([xshift=-2cm]$(pre-puc)!0.3!(puc)$) {non-og};
\node (influence) at ([xshift=-2cm]$(pre-puc)!0.7!(puc)$) {influence};
\draw[->,dashed] (non-og) -- (non-og-|puc);
\draw[->,dashed] ([yshift=0.05cm]influence.north east) -- ([yshift=0.05cm]influence.north-|puc);
\draw[->,dashed] ([yshift=-0cm]influence.east) -- ([yshift=-0cm]influence.east-|puc);
\draw[->,dashed] ([yshift=-0.05cm]influence.south east) -- ([yshift=-0.05cm]influence.south-|puc);
\end{tikzpicture}
\end{document}
答案3
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\path
(0,0) coordinate (A) node[above=2mm]{PUCD}
++(-150:2) coordinate (B) node[left=2mm]{pre-PUCD}
++(-90:2.5) coordinate (C) node[left=2mm]{PUC}
+(-120:2) coordinate (D) node[below=2mm]{Uwahaza}
+(-60:2) coordinate (E) node[below=2mm]{Cakaria}
+(0:3.5) coordinate (F) node[below=2mm]{Danundaga};
\draw (A)--(B)--(C)--(D) (C)--(E) (A)--(F);
\foreach \p in {A,B,C,D,E,F} \fill (\p) circle(1mm);
\path (B)--(C)
coordinate[pos=.35] (L1)
coordinate[pos=.5] (L2)
coordinate[pos=.65] (L3);
\draw[<-,dashed] (L1)++(180:.3)--+(180:1.5);
\draw[<-,dashed] (L3)++(180:.3)--+(180:1.5);
\draw[<-,dashed] (L2)++(180:.3)--+(180:1.5)
node[left,align=center]{non-dg\\influence};
\end{tikzpicture}
\end{document}