Ich speichere den Datensatz einfach im Makro `\data`, dann muss ich ihn nicht in jeder `\foreach` Schleife wiederholen. Das ganze würde prinzipiell auch in einer einzelnen Schleife gehen, ist meines Erachtens nach aber nicht praktikabel.
\documentclass[tikz]{standalone}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\definecolor{deep brown}{RGB}{125,91,49}
\definecolor{dark blue}{RGB}{0,0,181}
\definecolor{dark green}{RGB}{72,142,65}
\definecolor{crimson red}{RGB}{198,18,24}
\definecolor{light red}{RGB}{255,51,0}
\def\angle{0}
\def\radius{3}
\newcommand\square[1]{%
\tikz\filldraw[color=#1] (0,0) rectangle (1.5ex,1.5ex);%
}
\newcount\ind
\begin{document}
\newcommand\data{
14.8/Framsóknarflokkur/deep brown,
23.7/Sjálfstæðisflokkur/dark blue,
7.2/Borgarahreyfingin/blue,
0.6/Lýðræðishreyfingin/light red,
29.8/Samfylkingin/crimson red,
21.7/Vinstrihreyfingin--grænt framboð/dark green,
2.2/Sonstige/gray%
}
\begin{tikzpicture}
\begin{scope}
\global\ind=-1
\foreach \percent/\name/\color in \data {
\ifx\percent\empty\else % If \percent is empty, do nothing
\global\advance\ind by 1 % Advance list index
% Draw angle and set labels
\filldraw[color=\color] (0,0) -- (\angle:\radius) arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
\node[anchor=base west] at (\radius+2,1.5-.5*\ind) {\square{\color} \name};
\node[pin=\angle+0.5*\percent*3.6:\percent\%] at (\angle+0.5*\percent*3.6:\radius) {};
\pgfmathparse{\angle+\percent*3.6} % Advance angle
\xdef\angle{\pgfmathresult} % and store in \angle
\fi
};
\end{scope}
\pgfmathsetmacro\barmaxheight{5}
\begin{scope}[shift={(-2,-4-\barmaxheight)}]
\draw[<->] (0,\barmaxheight+0.5) |- (8,0);
\draw (2pt,\barmaxheight) -- (-2pt,\barmaxheight) node[left] {100\%};
\draw (2pt,.5*\barmaxheight) -- (-2pt,.5*\barmaxheight) node[left] {50\%};
\global\ind=-1
\foreach \percent/\name/\color in \data {
\ifx\percent\empty\else % If \percent is empty, do nothing
\global\advance\ind by 1 % Advance list index
% Draw angle and set labels
\filldraw[color=\color] (\ind+.7,0) rectangle (\ind+1.2,\barmaxheight/100*\percent);
\node[above] at (\ind+1,\barmaxheight/100*\percent) {\percent\%};
\node[rotate=45,anchor=north east] \node[rotate=45,anchor=base east,yshift=-1ex] at (\ind+1,0) {\name};
\fi
};
\end{scope}
\end{tikzpicture}
\end{document}
> ![alt text][1]
[1]: http://texwelt.de/wissen/upfiles/test_28.pnghttp://texwelt.de/wissen/upfiles/test_29.png