饼图显示不正确的百分比

饼图显示不正确的百分比

我的文档中的饼图使用以下代码显示不正确的百分比。最小值为 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

但这并不能完全满足您的要求,因为包将打印值,而不是百分比。因此,需要进行一些修改,您可以使用\patchcmdfrom 来完成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,我认为这在代码中是可行的(尽管我没有尝试过)。

相关内容