pgfplots 中的多個三元圖和餅圖

pgfplots 中的多個三元圖和餅圖

我正在嘗試繪製大量三元圖和餅圖。理想情況下它應該看起來像這樣: 在此輸入影像描述 在此輸入影像描述

左側的圓餅圖(三元圖)用於解釋正在發生的情況,而右側則是帶有資料的實際圖。我需要為 72 個基準繪製餅圖(三元圖),因此總共 72 個餅圖和 72 個三元圖。我目前使用的方法意味著大量的程式碼重複和手動調整。有沒有更聰明的組織方式?類似集體地塊嗎?而且,我對 pgfplots 的了解很少,因此程式碼需要大量打磨。特別是,我不知道如何更改餅圖中標題的字體大小以及如何將標題移近三元圖中的圖表。這是 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}

相關內容