我需要画一棵树,先向下生长,然后向上生长。在 pgfmanual 第 322 页中,提到了“生长”键。我没有办法指定另一侧的根/父级。此外,还谈到了定义生长函数的个人方法,但没有示例。因此,我在一个 tikz 图片环境中放置了两棵树,一棵向上生长,另一棵向下生长。但对齐真的很麻烦(请参阅 xhift 命令),甚至可能是不可能的。因此,我需要帮助来构建一棵生长方向不断变化的树。对我来说,问题是我不知道如何指定一些子代的父代,这对于从上述物种连接“属:芸苔属”、对于“目:天门冬目”和“纲:木兰纲”也是必要的。在最后一种情况下,如果我向下生长,则有三个 Ordo 子代和一个父代(纲...)。我希望,如果有人能解决这个问题,对齐将是一个小挑战,并且“类:木兰纲”(在树的末端)将作为另一个父类“户外”居中。提前谢谢大家。到目前为止,您可以在 mwe 中看到我所取得的成果。
\documentclass[10pt,a4paper,table]{article}
\usepackage[showframe,
left=2cm,
right=2cm,
bottom=1.75cm]{geometry}
%%%%%----- tikz -----%%%%%
\usepackage{tikz,fp}
\tikzstyle{every picture,
}+=[remember picture]
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} % \"a usw. !!!
\usepackage[figurename=Abb.]{caption}
\begin{document}
\tikzstyle{every picture}+=[remember picture]
\begin{figure}[h]\centering
\begin{tikzpicture}[%sibling distance=15em,
level distance=25mm,
every node/.style = {shape=rectangle, rounded corners,
draw, align=left, inner sep=4pt,
top color=white, bottom color=blue!20,
},
level 1/.style={sibling distance=10em},
]
\node {\textsc{Outdoor Freilandflächen} 112.000 ha\\
\textsc{Ernte:} 3.2 Mio to\\
\textsc{Betriebe ges.:} 6.600\\
\textsc{Ökologisch:} 1.100
}
child { node (spargel) {\textsc{Spargel:}\\ 24.000 ha\\ 100.000 to} }
child { node (zwiebel) {\textsc{Speisezwiebeln:}\\ 9.700 ha\\} }
child { node (moehren) {\textsc{Möhren:}\\ 10.200 ha\\} }
child { node (weisskohl) {\textsc{Weißkohl:}\\ 5.800 ha\\} } %
child { node (blumenkohl) {\textsc{Blumenkohl:}\\ 4.200 ha\\} } %
;
\end{tikzpicture}
%
%
\begin{tikzpicture}
[level distance=20mm,
every node/.style = {shape=rectangle, rounded corners,
draw, align=left, inner sep=4pt,
top color=white, bottom color=blue!20,
},
level 1/.style={sibling distance=15em},
]
\node[xshift=250mm] {\textsc{Class:}\\ Magnoliopsida %xhift doesn't work
}[grow=up]
%
child {node[xshift=30mm]{\textsc{Ordo:}\\ \textit{Brassicales} }
child {node {\textsc{Familia:}\\ \textit{Brassicaceae:} }
child {node{\textsc{Subfamilia:} \\ \textit{missing} }
child {node{\textsc{Tribus:} \\ \textit{missing} }
child {node {\textsc{Genus:}\\ \textit{Brassica} }
child {node[xshift=-10mm] (sblumenkohl){\textsc{Species:}\\
\textit{Brassica oleracea} \\var.
\textit{botrytis}
\textsc{L.} \\ }
}
child {node[xshift=08mm] (sweisskohl){\textsc{Species:}\\
\textit{Brassica oleracea} \\convar.
\textit{capitata} \\var.
\textit{alba}
\textsc{L.}
}
}
}
}
}
}
} %ende ordo Brassicales
child {node[xshift=28mm] {\textsc{Ordo:}\\ Apiales }
child {node {\textsc{Familia:}\\ \textit{Apiaceae:} }
child {node{\textsc{Subfamilia:} \\ \textit{missing} }
child {node{\textsc{Tribus:} \\ \textit{missing} }
child {node {\textsc{Genus:}\\ \textit{Daucus} \textsc{L.} 1753 }
child {node(smoehren){\textsc{Species:} \\ \textit{Daucus carota} \\ssp. \textit{sativus} \\ }
}
}
}
}
}
} %ende apiales
%
%
child {node[xshift=12mm]{\textsc{Ordo:}\\ \textit{Asparagales}\\ }
child {node[xshift=09mm]{\textsc{Familia:}\\ \textit{Amaryllidaceae:} }
child {node{\textsc{Subfamilia:} \\ \textit{Allioideae} }
child {node {\textsc{Tribus:}\\ \textit{Allieae} }
child {node{\textsc{Genus:} \\ \textit{Allium} \textsc{} }
child {node(szwiebel){\textsc{Species:} \\ \textit{Allium cepa} \textsc{}\\ \\ }
}
}
}
}
}
%
child {node[xshift=27mm] {\textsc{Familia:}\\ \textit{Asparagaceae:} }
child {node[xshift=0mm]{\textsc{Subfamilia:} \\ \textit{Asparagoideae} }
child {node[xshift=0mm]{\textsc{Tribus:} \\ \textit{missing} }
child {node[xshift=0mm] {\textsc{Genus:} \\ \textit{Asparagus} }
child {node[xshift=0mm](sspargel){\textsc{Species:} \\ \textit{Asparagus} \\ \textit{officinalis} \textsc{L.}\\ }
}
}
}
}
}
} %ende ordo asparagales
;
\draw [shorten >=0pt,thick] (zwiebel.south) -- (szwiebel.north);
\draw [shorten >=0pt,thick] (spargel.south) -- (sspargel.north);
\draw [shorten >=0pt,red,thick,dashed] (moehren.south) -- (smoehren.north);
\draw [shorten >=0pt,green,thick,dashed] (weisskohl.south) -- (sweisskohl.north);
\draw [shorten >=0pt,red,thick,dashed] (blumenkohl.south) -- (sblumenkohl.north);
\end{tikzpicture}
\caption[Übersicht \textit{Gemüse BRD 2013} \textsc{}] {Übersicht \textit{Gemüse BRD 2013} }
\end{figure}
\end{document}
答案1
为了绘制您的树,我将使用forest
包并为其定义树仅向南生长,即只有一棵树。 的一些分支共有的节点forest
与幻影节点(节点“Ordo”)或坐标(节点“Genus”)成对放置。 分支末端的节点被命名(从 aux1 到 aux6)。 这些名称用于绘制未在 中绘制为边的线forest
。
编辑:
在使用时siunitx
定义为range-units = single
,,group-minimum-digits=4
。group-separator={.}
这样可以统一数字的书写方式,并且数量范围更短。
\documentclass[a4paper]{article}
\usepackage[showframe,
hmargin=2cm,
bottom=1.75cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[edges]{forest}
\usepackage[ngerman]{babel}
\usepackage[figurename=Abb.]{caption}
\usepackage{siunitx} % used is v3
\begin{document}
\begin{figure}[ht]
\centering
\sisetup{range-units = single,
group-minimum-digits=4,
group-separator={.}
}
\begin{forest}
for tree = {
% nodes
draw,
rounded corners,
top color=white, bottom color=blue!20,
minimum width=8em,
align=left,
% tree
grow=south,
forked edge, % for forked edge
s sep = 2mm, % "sibling" distance
l sep = 4mm, % "level" distance
fork sep = 2mm, % distance from parent to branching point
},
[\textsc{Outdoor Freilandflächen} \qty{112 000}{ha}\\
\textsc{Ernte:} 3.2 Mio to\\
\textsc{Betriebe ges.:} 6.600\\
\textsc{Ökologisch:} 1.100
[\textsc{Spargel:}\\
\qtyrange{24 000}{100 000}{ha}
[\textsc{Species:} \\
\textit{Asparagus} \\
\textit{officinalis} L.\\ ~
[\textsc{Genus:} \\
\textit{Asparagus}
[\textsc{Tribus:} \\
\textit{missing}
[\textsc{Subfamilia:} \\
\textit{Asparagoideae}
[\textsc{Familia:}\\
\textit{Asparagaceae:}
[,phantom]
[\textsc{Ordo:}\\ \textit{Asparagales}, name=aux1]
]
]
]
]
]
]
[\textsc{Speisezwiebeln:}\\
\qty{9 700}{ha}
[\textsc{Species:} \\
\textit{Allium cepa}\\ ~\\~
[\textsc{Genus:} \\
\textit{Allium}
[\textsc{Tribus:}\\
\textit{Allieae}
[\textsc{Subfamilia:} \\
\textit{Allioideae}
[\textsc{Familia:}\\ \textit{Amaryllidaceae:}, name=aux2]
]
]
]
]
]
[\textsc{Möhren:}\\
\qty{10 200}{ha}
[\textsc{Species:} \\
\textit{Daucus carota}\\
ssp. \textit{sativus}\\ ~
[\textsc{Genus:}\\
\textit{Daucus} L. 1753
[\textsc{Tribus:} \\
\textit{missing}
[\textsc{Subfamilia:} \\
\textit{missing}
[\textsc{Familia:}\\
\textit{Apiaceae:}
[\textsc{Ordo:}\\ \textit{Apiales},
[\textsc{Class:}\\
\textit{Magnopoliopsida},name=aux3]
]
]
]
]
]
]
]
[\textsc{Weißkohl:}\\
\qty{5 800}{ha}
[\textsc{Species:}\\
\textit{Brassica oleracea} \\
convar. \textit{capitata} \\
var. \textit{alba} L.
[,coordinate, no edge]
[\textsc{Genus:}\\
\textit{Brassica}, name=aux5
[\textsc{Tribus:}\\
\textit{missing}
[\textsc{Subfamilia:}\\
\textit{missing}
[\textsc{Familia:}\\
\textit{Brassicaceae:}
[\textsc{Ordo:}\\
\textit{Brassicales}, name=aux6]
]
]
]
]
]
]
[\textsc{Blumenkohl:}\\
\qty{4 200}{ha}
[\textsc{Species:}\\
\textit{Brassica oleracea} \\
var. \textit{botrytis} L. \\ ~, name=aux4]
]
]
\draw ([xshift=1em] aux1.north) -- ++ (0,0.2) -| (aux2);
\draw (aux1.south) -- ++ (0,-0.2) -| ([xshift=-1em] aux3.north);
\draw (aux4.south) -- ++ (0,-0.2) -| ([xshift=+1em] aux5.north);
\draw (aux6.south) -- ++ (0,-0.2) -| ([xshift=+1em] aux3.north);
\end{forest}
\caption[Übersicht \textit{Gemüse BRD 2013} \textsc{}] {Übersicht \textit{Gemüse BRD 2013} }
\label{fig:ubershicht}
\end{figure}
\end{document}