不幸的是,您无法读取小饼块中的百分比。有没有简单的解决方案?将百分比放在饼图外面还是放在图例中?
\documentclass{article}
\usepackage{pgf-pie,stackengine}
\begin{document}
\begin{figure}[h!]
\centering
\begin{tikzpicture}
\small
\pie[radius=2, color={cyan!90, green!70, blue!40, magenta!90}, text=legend]{13.52/Opernveranstaltungen, 1.19/Operettenveranstaltungen, 3.58/Musicalveranstaltungen, 81.7/andere Veranstaltungen}
\end{tikzpicture}
\caption[Veranstaltungen]{Veranstaltungen}
\label{fig:verteilung_theatertypen}
\end{figure}
\end{document}
答案1
我有两种方法。第一种方法基于pgf-pie
OP 所用的 ,第二种方法基于不同的方法。
方法 1
这里,我画了三个同心饼图来实现结果。
同心圆方法是第一个饼图绘制图例并将切片值放在图表上(这对于薄切片不利)。第二个同心圆图表仅重新绘制那些太薄的切片,并要求省略切片内的编号,而是使用外围的外部文本区域重申切片值(我也必须这样做\raisebox
)。最后一个图重新绘制了 13.52% 的切片,其中可以包含标签。
\documentclass{article}
\usepackage{pgf-pie}
\begin{document}
\begin{figure}[h!]
\centering
\begin{tikzpicture}
\small
\pie[radius=2, color={cyan!90, green!70, blue!40, magenta!90},text=legend]{13.52/Opernveranstaltungen, 1.19/Operettenveranstaltungen, 3.58/Musicalveranstaltungen, 81.7/andere Veranstaltungen}
\pie[hide number, radius=2, color={cyan!90, green!70, blue!40}]%
{13.52/, 1.19/\!1.19\%, 3.58/\raisebox{3pt}{$\!\!3.58\%$}}
\pie[radius=2, color={cyan!90, green!70, blue!40}]{13.52/}
\end{tikzpicture}
\caption[Veranstaltungen]{Veranstaltungen}
\label{fig:verteilung_theatertypen}
\end{figure}
\end{document}
方法 2
我只是尝试调整我的答案带外部文本的饼图。在这里,我检查百分比值...如果小于 3,标签将放在外面。我提供了一个参数来移动标签以防止重叠,并且还提供了颜色规范。
\documentclass{article}
\newcounter{a}
\newcounter{b}
\usepackage{tikz}
\begin{document}
\def\trunc#1.#2\relax{#1}
\newcommand{\slice}[6]{
\pgfmathparse{0.5*#2+0.5*#3}
\let\midangle\pgfmathresult
% slice
\draw[thick,fill=#1] (0,0) -- (#2:1) arc (#2:#3:1) -- cycle;
% outer label
\node[label=\midangle:#5] at (\midangle:1#6) {};
% inner label
\pgfmathparse{min((#3-#2-10)/110*(-0.3),0)}
\let\temp\pgfmathresult
\pgfmathparse{max(\temp,-0.5) + 0.8}
\let\innerpos\pgfmathresult
\node at (\midangle:\innerpos) {#4};
}
\begin{figure} [!htbp]
\begin{center}
\begin{tikzpicture}[scale=3]
\newcounter{c}
\newcounter{d}
\foreach \p/\d/\cc in {
13.52//cyan!90,
1.19/-.04/green!70,
3.58/.03/blue!40, % PCT/OUTER LABEL DECIMAL SHIFT/COLOR
81.7//magenta!90}
{
\setcounter{a}{\theb}
\pgfmathparse{int(100*\p)}
\addtocounter{b}{\pgfmathresult}
\slice{\cc}{\thea/10000*360}
{\theb/10000*360}
{\ifnum\expandafter\trunc\p\relax>3\relax\p\%\fi}% <- CUTOFF OF 3%
{\ifnum\expandafter\trunc\p\relax>3\relax\else\p\%\fi}
{\d}
}
\end{tikzpicture}
\end{center}
\caption{My pie}
\end{figure}
\end{document}
答案2
这轮图我写的包,可以使用。
定义一个命令\WCtest
,其输出取决于百分比是否大于 10。此命令用于键data
和wheel data
。此处,使用 来获取百分比\WCperc
。
图例由键决定legend
。这是一个tabular
放置在 中的\node
。行由键决定legend row
。可以使用 获得所有行的结果\WClegend
。
\documentclass[border=6pt]{standalone}
\usepackage{wheelchart}
\usepackage{siunitx}
\begin{document}
\begin{tikzpicture}
\def\WCtest#1#2{%
\pgfmathparse{\WCpercentage>10?"#1":"#2"}%
\pgfmathresult%
}
\wheelchart[
anchor xsep=35,
anchor ysep=55,
counterclockwise,
data=\WCtest{}{\WCperc},
legend row={\tikz\fill[\WCvarB,draw=black] (0,0) rectangle (0.3,0.3); & \WCvarC},
legend={
\node[anchor=west] at (2.5,0) {%
\begin{tabular}{l@{ }l}%
\WClegend%
\end{tabular}%
};
},
perc precision=2,
radius={0}{2},
slices style={\WCvarB,draw=black},
start angle=0,
wheel data=\WCtest{\WCperc}{}
]{%
13.52/cyan!90/Opernveranstaltungen,
1.19/green!70/Operettenveranstaltungen,
3.58/blue!40/Musicalveranstaltungen,
81.7/magenta!90/andere Veranstaltungen%
}
\end{tikzpicture}
\end{document}