我想使用 tickz 绘制一个由 3 个部分组成的饼图。问题是其中一个百分比太小,文本显示混乱,难以阅读。
这 3 个百分比分别是96.34%
、3.22%
和 0.155%
。当我执行以下操作时
\documentclass[border=0.2cm]{standalone}
% Pie chart drawing library
\usepackage{pgf-pie}
\begin{document}
\begin{tikzpicture}
\pie[
/tikz/every pin/.style={align=center},
color = {
yellow!90,
green!60,
blue!60}
]{96.34/Case 1,
3.22/Case 2,
0.155/Case 3
}
\end{tikzpicture}
\end{document}
结果如下
使用其他手动绘图工具完成此操作的一种方法是使该小段比其实际百分比稍大(以便它在饼图中显示得更清晰),但使用实际百分比作为标签。
我不知道如何在 tikz 中执行此操作。另一种选择是将百分比写在饼图外面,例如用箭头从那个小部分伸出。
我尝试修改其中的代码无法在 Tikz 饼图中将文本及其图钉设置为正确的方向 如下所示,但由于我完全不懂代码,所以很难将标签放在正确的位置。这是我的第二次尝试
\begin{document}
\begin{figure}[h]
\def\angle{0}
\def\radius{2}
\def\labelradius{3}
\def\cyclelist{{"red","blue","cyan"}}
\centering
\newcount\cyclecount \cyclecount=-1
\newcount\ind \ind=-1
\begin{tikzpicture}[nodes = {font=\small}]
\foreach \percent/\name in {
96.34/case one,
3.22/case two,
0.155/case three
} {
\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
\ifnum6<\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[fill={\color!50},draw={\color}] (0,0) -- (\angle:\radius)
arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
\draw[draw=gray, shorten >=2pt] (\angle+0.5*\percent*3.6:\labelradius) node {\name~\percent\%} edge (\angle+0.5*\percent*3.6:\radius);
\pgfmathparse{\angle+\percent*3.6} % Advance angle
\xdef\angle{\pgfmathresult} % and store in \angle
\fi
};
\end{tikzpicture}
\end{figure}
\end{document}
如果我能弄清楚如何将标签推离饼图稍远一点,那么上述方法就可以奏效。
在 tikz 中处理此类情况的正确方法是什么?
Linux 上的 TL 2022。我使用的是这个地点作为参考来学习如何制作饼图。
更新:
我最终使用 IPE latex 绘图程序完成了此操作。结果如下
我确信这可以在 tikz 中完成,但对我来说太难了。
答案1
从包文档中的一些示例中提取代码后wheelchart
,这是一个可能的结果。
\documentclass[tikz, border=2mm]{standalone}
\usepackage{wheelchart}
\usepackage{siunitx}
\begin{document}
\begin{tikzpicture}
\newcommand{\WCtest}[2]{%
\ifdim \WCpercentage pt > 10 pt%
#1%
\else
#2%
\fi%
}
\wheelchart[
pie,
data={\WCtest{}{\qty{\WCvarA}{\percent}}},
data angle shift=\WCvarD,
lines={1-max(sign(\WCpercentage-10),0)},
lines style={dotted, thick},
start angle=30,
wheel data={\WCtest{\qty{\WCvarA}{\percent}}{}}
]{%
96.34/blue/{Case one}/0,
3.22/green/{Case two}/0,
0.155/red/{Case three}/0
}
\end{tikzpicture}
\end{document}