我的文档中的饼图使用以下代码显示不正确的百分比。最小值为 0,最大值为 104。例如,在 104 个答案中,正确答案为 42.3%、29.8% 和 26.9%,但图表上显示的值为 44%、31% 和 29%。请解决此问题
\begin{figure}[H]
\begin{centering}
%\begin{adjustwidth}{-1.5cm}{}
\footnotesize
\begin{tikzpicture}
\begin{scope}[scale=0.7]
\pie[text = legend] {
44/ A,
31/ B,
29/ C}
\end{scope}
\end{tikzpicture}
\caption{Strategies }
%\end{adjustwidth}
\label{fig:SQ12}
\end{centering}
\end{figure}
答案1
笔记:这个答案中的代码确实不是在 2020 年为版本 0.4(我认为)重写软件包之后,此功能将无法工作。因此,如果您的安装时间较晚,则此功能将无法正常工作。
您当前的饼图实际上是错误的,因为pgf-pie
默认情况下假设值将加到 100。例如,尝试\tikz{\pie{44/ A,31/ B,129/ C}}
一个极端情况。
如果值加起来不等于 100,则需要sum=auto
选择\pie
。
但这并不能完全满足您的要求,因为包将打印值,而不是百分比。因此,需要进行一些修改,您可以使用\patchcmd
from 来完成etoolbox
。这允许您通过将特定代码片段替换为其他内容来修改宏。
\documentclass[border=5mm]{standalone}
\usepackage{pgf-pie}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\pgfpie@slice}
% replace the following
{\path (O) -- ++(\midangle:\innerpos) node
{\scalefont{#3}\pgfpie@numbertext{#3}};
}
% with this:
{
\ifthenelse{\equal{\pgfpie@sum}{100}}{
% \equal is a string comparison, so it will only be true if sum=auto is not in effect
% (even if the values add up to 100, \pgfpie@sum becomes 100.0, which as a string is not the same as 100
\pgfmathsetmacro\tmp{#3}
}{
% so if sum=auto is in effect, calculate the percentage
\pgfmathsetmacro\tmp{#3/\pgfpie@sum*100}
}
% the modification here is from \pgfpie@numbertext{#3}.
\path (O) -- ++(\midangle:\innerpos) node
{\scalefont{#3}\pgfpie@numbertext{\pgfmathprintnumber[precision=1]{\tmp}}}; }
{}
{}
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{scope}[scale=0.7]
% you need after number=\% because that gets turned off with sum=auto
\pie[text = legend, sum=auto, after number=\%] {
44/ A,
31/ B,
29/ C}
\end{scope}
\end{tikzpicture}
\end{document}
答案2
嗯,你告诉它输入你得到的数字。为什么不输入 42.3、29.8 和 26.9?
或者,将您现在拥有的每个数除以 104,我认为这在代码中是可行的(尽管我没有尝试过)。