
Ich versuche, viele ternäre Diagramme und Kreisdiagramme zu zeichnen. Im Idealfall sollte es ungefähr so aussehen:
Das Kreisdiagramm (ternäres Diagramm) auf der linken Seite dient als Erklärung dessen, was passiert, während auf der rechten Seite die eigentlichen Diagramme mit Daten zu sehen sind. Ich muss Kreisdiagramme (ternäre Diagramme) für 72 Benchmarks zeichnen, also insgesamt 72 Kreisdiagramme und 72 ternäre Diagramme. Der aktuelle Ansatz, den ich verwende, impliziert eine Menge Codeduplizierung und manuelle Anpassung. Gibt es eine intelligentere Möglichkeit, dies zu organisieren? Etwas Ähnliches wie Grouplots? Außerdem sind meine Kenntnisse in pgfplots sehr gering, daher muss der Code stark verfeinert werden. Insbesondere habe ich keine Ahnung, wie man die Schriftgröße in Titeln in Kreisdiagrammen ändert und wie man Titel in ternären Diagrammen näher an die Diagramme verschiebt. Hier ist das MWE:
\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\usepgfplotslibrary{ternary, units}
\usepackage{tikz}
\begin{document}
\newcommand{\legend}[2][]{
\begin{scope}[#1]
\path
\foreach \n/\s in {#2}
{
++(0,-10pt) node[\s,legend box] {} +(5pt,0) node[legend label] {\n}
}
;
\end{scope}
}
\tikzstyle{chart}=[
legend label/.style={font={\scriptsize},anchor=west,align=left},
legend box/.style={rectangle, draw, minimum size=5pt},
axis/.style={black,semithick,->},
axis label/.style={anchor=east,font={\tiny}},
]
\tikzstyle{pie chart}=[
chart,
slice/.style={line cap=round, line join=round, very thick,draw=white},
pie title/.style={font={\bf}},
slice type/.style 2 args={
##1/.style={fill=##2},
values of ##1/.style={}
}
]
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
\newcommand{\pie}[3][]{
\begin{scope}[#1]
\pgfmathsetmacro{\curA}{90}
\pgfmathsetmacro{\r}{1}
\def\c{(0,0)}
\node[pie title] at (90:1.3) {#2};
\foreach \v/\s in{#3}{
\pgfmathsetmacro{\deltaA}{\v/100*360}
\pgfmathsetmacro{\nextA}{\curA + \deltaA}
\pgfmathsetmacro{\midA}{(\curA+\nextA)/2}
\path[slice,\s] \c
-- +(\curA:\r)
arc (\curA:\nextA:\r)
-- cycle;
\pgfmathsetmacro{\d}{max((\deltaA * -(.4/50) + 1) , .5)}
\begin{pgfonlayer}{foreground}
\path \c -- node[pos=\d,pie values,values of \s]{$\v\%$} +(\midA:\r);
\end{pgfonlayer}
\global\let\curA\nextA
}
\end{scope}
}
\begin{figure}
\begin{minipage}{0.3\linewidth}
\begin{tikzpicture}
[
pie chart,
slice type={inlined}{lightgray},
slice type={noninlined}{darkgray},
pie values/.style={font={\tiny}},
scale=1.5
]
\pie{benchmark}{41/inlined,13/noninlined}
\legend[shift={(-1cm,-1cm)}]{{Inlined}/inlined, {Not inlined}/noninlined}
\end{tikzpicture}
\end{minipage}
\begin{minipage}{0.12\linewidth}
\begin{tikzpicture}
[
pie chart,
slice type={inlined}{lightgray},
slice type={noninlined}{darkgray},
pie values/.style={font={\tiny}},
scale=0.7
]
\pie{benchmark1}{14/inlined,43/noninlined}
\end{tikzpicture}
\end{minipage}
\begin{minipage}{0.2\linewidth}
\begin{tikzpicture}
[
pie chart,
slice type={inlined}{lightgray},
slice type={noninlined}{darkgray},
pie values/.style={font={\tiny}},
scale=0.7
]
\pie{benchmark2}{34/inlined,9/noninlined}
\end{tikzpicture}
\end{minipage}
\begin{minipage}{0.12\linewidth}
\begin{tikzpicture}
[
pie chart,
slice type={inlined}{lightgray},
slice type={noninlined}{darkgray},
pie values/.style={font={\tiny}},
scale=0.7
]
\pie{benchmark3}{14/inlined,43/noninlined}
\end{tikzpicture}
\end{minipage}
\begin{minipage}{0.12\linewidth}
\begin{tikzpicture}
[
pie chart,
slice type={inlined}{lightgray},
slice type={noninlined}{darkgray},
pie values/.style={font={\tiny}},
scale=0.7
]
\pie{benchmark4}{34/inlined,9/noninlined}
\end{tikzpicture}
\end{minipage}
\end{figure}
\begin{figure}
\begin{minipage}{0.4\linewidth}
\pgfplotsset{width=5cm}
\begin{tikzpicture}
\begin{ternaryaxis}[
xmin=0,
xmax=100,
ymin=0,
ymax=100,
zmin=0,
zmax=100,
font=\scriptsize,
xlabel=frequency,
ylabel=size,
zlabel=monomorphism,
minor tick num=3,
grid=both,
title={\textbf{benchmark}},
cycle list={{fill=darkgray, mark = triangle*},
{fill=lightgray, mark=*}},
legend cell align=left,
legend entries={Inlined, Not inlined},
legend style={mark size=2.6pt, at={(0,1)},
font=\scriptsize,
anchor=south,at={(axis description cs:0.5,-0.8)}},
mark size=2.6pt,
]
\addplot3+[only marks]
coordinates {
(20, 20, 40)
};
\addplot3+[only marks]
coordinates {
(10, 80, 10)
};
\end{ternaryaxis}
\end{tikzpicture}
\end{minipage}
\pgfplotsset{width=3.3cm}
\begin{minipage}{0.1\linewidth}
\begin{tikzpicture}
\begin{ternaryaxis}[
ticks=none,
xmin=0,
xmax=100,
ymin=0,
ymax=100,
zmin=0,
zmax=100,
mark size=2pt,
font=\tiny,
minor tick num=0,
cycle list={{fill=darkgray, mark = triangle*},
{fill=lightgray, mark=*}},
title={\bf{benchmark1}},
grid=both,
minor tick num=2,
]
\addplot3+[only marks]
coordinates {
(20, 40, 20)
};
\addplot3+[only marks]
coordinates {
(10, 10, 80)
};
\end{ternaryaxis}
\end{tikzpicture}
\end{minipage}
\pgfplotsset{width=3.3cm}
\begin{minipage}{0.1\linewidth}
\begin{tikzpicture}
\begin{ternaryaxis}[
ticks=none,
xmin=0,
xmax=100,
ymin=0,
ymax=100,
zmin=0,
zmax=100,
mark size=2pt,
font=\tiny,
minor tick num=2,
grid=both,
cycle list={{fill=darkgray, mark = triangle*},
{fill=lightgray, mark=*}},
title={\bf{benchmark2}}
]
\addplot3+[only marks]
coordinates {
(15, 45, 40)
};
\addplot3+[only marks]
coordinates {
(33, 33, 33)
};
\end{ternaryaxis}
\end{tikzpicture}
\end{minipage}
\begin{minipage}{0.1\linewidth}
\begin{tikzpicture}
\begin{ternaryaxis}[
ticks=none,
xmin=0,
xmax=100,
ymin=0,
ymax=100,
zmin=0,
zmax=100,
mark size=2pt,
font=\tiny,
minor tick num=2,
grid=both,
cycle list={{fill=darkgray, mark = triangle*},
{fill=lightgray, mark=*}},
title={\bf{benchmark3}}
]
\addplot3+[only marks]
coordinates {
(15, 45, 40)
};
\addplot3+[only marks]
coordinates {
(33, 33, 33)
};
\end{ternaryaxis}
\end{tikzpicture}
\end{minipage}
\begin{minipage}{0.1\linewidth}
\begin{tikzpicture}
\begin{ternaryaxis}[
ticks=none,
xmin=0,
xmax=100,
ymin=0,
ymax=100,
zmin=0,
zmax=100,
mark size=2pt,
font=\tiny,
minor tick num=2,
grid=both,
cycle list={{fill=darkgray, mark = triangle*},
{fill=lightgray, mark=*}},
title={\bf{benchmark4}}
]
\addplot3+[only marks]
coordinates {
(15, 45, 40)
};
\addplot3+[only marks]
coordinates {
(33, 33, 33)
};
\end{ternaryaxis}
\end{tikzpicture}
\end{minipage}
\end{figure}
\end{document}