I would like to make a simple scheme looking like tree diagram (structure like this or that). The problem is that all the packages I did try, could make nice binary trees with little information in the nodes. My tree is not binary and I need to put some words on each node, so what tools could you recommend me to try for this?
Asked
Active
Viewed 7,435 times
6
-
1somewhat related: http://tex.stackexchange.com/questions/50391/how-to-draw-a-horizontal-tree-with-branches-on-the-right-and-left. The second answer may be of interest to you. – Apr 02 '12 at 08:11
-
There are lots of questions on the site with complex tree structures. Have a look at Joining two branches of a family tree or How to draw up a hierarchical tree diagram for taxonomic classification or Horizontal hierarchy tree in tikz-qtree: bad layout for longer node-names – Alan Munn Apr 02 '12 at 10:18
2 Answers
6
I think TikZ can do that without problem and without library. It's possible to add some parameters if you want to change something automatically. You can with the next method to scale without problem.
\documentclass[11pt]{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[every node/.style = {shape = rectangle,
rounded corners,
fill = blue!40!white,
minimum width = 3cm,
minimum height = 1.5cm,
align = center,
text = white},
blue edge/.style = { -,
ultra thick,
blue!40!white,
shorten >= 4pt}]
% the nodes : possible \newcommand*\dx{5} \newcommand*\dy{2}
\node(0;0) at (0,0) {Eukaryotes};
\node(1;2) at (5, 4) {Unikonts};
\node(1;1) at (5, 2) {Chromalveolates};
\node(1;0) at (5, 0) {Excavates};
\node(1;-1) at (5,-2) {Rhizaria};
\node(1;-2) at (5,-4) {Plantae\\
(Archeplastida)};
\node(2;1) at (10,-2) {Conifers};
\node(2;0) at (10,-4) {Gnetales};
\node(2;-1) at (10,-6) {Angiosperms};
% edges
\foreach \j in {-2,...,2}
{ \draw[blue edge] (0;0.east) -- (1;\j.west); }
\foreach \j in {-1,...,1}
{ \draw[blue edge] (1;-2.east) -- (2;\j.west);}
\end{tikzpicture}
\end{document}

If you want to modify the position with parameters:
\documentclass[11pt]{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[every node/.style = {shape = rectangle,
rounded corners,
fill = blue!40!white,
minimum width = 3cm,
minimum height = 1.5cm,
align = center,
text = white},
blue edge/.style = { -,
ultra thick,
blue!40!white,
shorten >= 4pt}]
\newcommand*\dx{5} \newcommand*\dy{2}
% nodes
\node(0;0) at (0,0) {Eukaryotes};
\node(1;2) at (\dx, 2*\dy) {Unikonts};
\node(1;1) at (\dx, \dy) {Chromalveolates};
\node(1;0) at (\dx, 0) {Excavates};
\node(1;-1) at (\dx,-\dy) {Rhizaria};
\node(1;-2) at (\dx,-2*\dy) {Plantae\\
(Archeplastida)};
\node(2;1) at (2*\dx,-\dy) {Conifers};
\node(2;0) at (2*\dx,-2*\dy) {Gnetales};
\node(2;-1) at (2*\dx,-3*\dy) {Angiosperms};
% edges
\foreach \j in {-2,...,2}
{ \draw[blue edge] (0;0.east) -- (1;\j.west); }
\foreach \j in {-1,...,1}
{ \draw[blue edge] (1;-2.east) -- (2;\j.west);}
\end{tikzpicture}
\end{document}
Moriambar
- 11,466
Alain Matthes
- 95,075
-
Thanks! I have almost finished my own diagram, however, compiler tells me that it doesn't know key 'tikz/align'. When I remove this line, everything works, but I cannot wrap a line. Could you help me with this? – Pavasaris Apr 02 '12 at 16:10
-
If you work with pgf 2.00 you need to use
text centeredinstead of 'align=center` but It would be preferable to install pgf 2.10. – Alain Matthes Apr 02 '12 at 18:48
4
An example without coordinates. Run it with xelatex or latex->dvips->ps2pdf
\documentclass{article}
\usepackage{pst-tree,array}
\begin{document}
\def\PSB#1{\pspicture(3,1.5)\psTextFrame[shadow,fillcolor=red!30,
fillstyle=solid,linecolor=blue,framearc=0.3](0,0)(3,1.5){%
\shortstack{#1}}\endpspicture}
\pstree[treemode=R,levelsep=2cm]{\Tr[ref=rc]{\PSB{Eukaryotes}}}{%
\Tr[ref=lc]{\PSB{Unikonts}}
\Tr[ref=lc]{\PSB{Chromalveolates}}
\Tr[ref=lc]{\PSB{Excavates}}
\Tr[ref=lc]{\PSB{Rhizaria}}
\pstree[treemode=R,levelsep=4.5cm]{\Tr[ref=lc]{\PSB{Plantae\\(Archeplastida)}%
\pnode(0,0.75){Dummy}{}}}{\def\pspred{Dummy}%
\Tr[ref=lc]{\PSB{Conifers}}\def\pspred{Dummy}%
\Tr[ref=lc]{\PSB{Gnetales}}\def\pspred{Dummy}%
\Tr[ref=lc]{\PSB{Angiosperms}}%
}}
\end{document}
