von Bartman » Di 18. Feb 2020, 01:36
\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\def\angle{0}
\def\radius{3}
\def\cyclelist{{"orange","blue","red","green","cyan"}}
\newcount\cyclecount \cyclecount=-1
\newcount\ind \ind=-1
\begin{tikzpicture}[
nodes = {font=\sffamily},
legend image/.style={fill=#1!50,draw=#1}
]
\foreach \percent in {
20,
15,
25,
20,
20
} {
\ifx\percent\empty\else % If \percent is empty, do nothing
\global\advance\cyclecount by 1 % Advance cyclecount
\global\advance\ind by 1 % Advance list index
\ifnum4<\cyclecount % If cyclecount is larger than list
\global\cyclecount=0 % reset cyclecount and
\global\ind=0 % reset list index
\fi
\pgfmathparse{\cyclelist[\the\ind]} % Get color from cycle list
\edef\color{\pgfmathresult} % and store as \color
% Draw angle and set labels
\draw[fill={\color!50},draw={\color}] (0,0) -- (\angle:\radius)
arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
\node at (\angle+0.5*\percent*3.6:0.7*\radius) {\percent\,\%};
% \node[pin=\angle+0.5*\percent*3.6:\name]
% at (\angle+0.5*\percent*3.6:\radius) {};
\pgfmathparse{\angle+\percent*3.6} % Advance angle
\xdef\angle{\pgfmathresult} % and store in \angle
\fi
};
\matrix [
matrix of nodes,
draw,
column 2/.style={nodes={anchor=west}}
] at (\radius+1,0) {
|[legend image=orange]| & a\\
|[legend image=blue]| & b\\
|[legend image=red]| & c\\
|[legend image=green]| & d\\
|[legend image=cyan]| & e\\
};
\end{tikzpicture}
\end{document}
Wahrscheinlich kann man die Farben noch irgendwie aus der \cyclelist auslesen, damit sie nicht erneut eingegeben werden müssen.
Der Autor des Beispiels zeigt eine
andere Art, eine Legende einzufügen.
[code]\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\def\angle{0}
\def\radius{3}
\def\cyclelist{{"orange","blue","red","green","cyan"}}
\newcount\cyclecount \cyclecount=-1
\newcount\ind \ind=-1
\begin{tikzpicture}[
nodes = {font=\sffamily},
legend image/.style={fill=#1!50,draw=#1}
]
\foreach \percent in {
20,
15,
25,
20,
20
} {
\ifx\percent\empty\else % If \percent is empty, do nothing
\global\advance\cyclecount by 1 % Advance cyclecount
\global\advance\ind by 1 % Advance list index
\ifnum4<\cyclecount % If cyclecount is larger than list
\global\cyclecount=0 % reset cyclecount and
\global\ind=0 % reset list index
\fi
\pgfmathparse{\cyclelist[\the\ind]} % Get color from cycle list
\edef\color{\pgfmathresult} % and store as \color
% Draw angle and set labels
\draw[fill={\color!50},draw={\color}] (0,0) -- (\angle:\radius)
arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
\node at (\angle+0.5*\percent*3.6:0.7*\radius) {\percent\,\%};
% \node[pin=\angle+0.5*\percent*3.6:\name]
% at (\angle+0.5*\percent*3.6:\radius) {};
\pgfmathparse{\angle+\percent*3.6} % Advance angle
\xdef\angle{\pgfmathresult} % and store in \angle
\fi
};
\matrix [
matrix of nodes,
draw,
column 2/.style={nodes={anchor=west}}
] at (\radius+1,0) {
|[legend image=orange]| & a\\
|[legend image=blue]| & b\\
|[legend image=red]| & c\\
|[legend image=green]| & d\\
|[legend image=cyan]| & e\\
};
\end{tikzpicture}
\end{document}[/code]
Wahrscheinlich kann man die Farben noch irgendwie aus der [tt]\cyclelist[/tt] auslesen, damit sie nicht erneut eingegeben werden müssen.
Der Autor des Beispiels zeigt eine [url=https://texwelt.de/fragen/15765]andere Art, eine Legende einzufügen[/url].