# Pie chart with values instead of percentage

First, I started using LaTeX way to late! and thanks for all the hints on this site.

I looked at the answer of the following question. https://tex.stackexchange.com/questions/135393/how-to-draw-bar-pie-chart

This chart uses the value 100 as maxvalue. I want to change it a bit, it should sum up all parameters and use that as the new 100%

Example of a pie chart (sum of 922 as 100%)

\pie{Pie XYZ}
{337/div,196/drog,191/verm,118/gew,47/staa}


Here is the orginal script with my idea in the comment. To be frank I have never use tex-script before, but just with googling I couldn't manage to get what I want.

Any help for a LaTeX noob higly appreciated.

\newcommand{\pie}[3][]{
\begin{scope}[#1]
\pgfmathsetmacro{\curA}{90}
\pgfmathsetmacro{\r}{1}
\def\c{(0,0)}
\node[pie title] at (90:1.3) {#2};

% Sum all parameters for max value
%   \newcounter{tmpSUM}
%   \foreach \v / \s in{#3}{
%       \setcounter{tmpSUM}{\v}
%   }

\foreach \v/\s in{#3}{
%       \pgfmathsetmacro{\deltaA}{\v / tmpSUM *360}
\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 * -(.5/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}
}


Your commented solution is closer to the working one. The idea of looping through the values and accumulating the sum in tmpSUM is quite right but:

1. you may want to use \pgfmath to support non-integer values
2. the body of the \foreach is in a group so you need global assignments to make the value of the counter escape the scope of the for and be available afterwards (see this answer).

This can be accomplished by

\pgfmathsetmacro{\tmpSUM}{0}
\foreach \v/\s in{#3}{
\pgfmathparse{\tmpSUM+\v}
\global\let\tmpSUM\pgfmathresult
}


and then you can use

\pgfmathsetmacro{\deltaA}{\v / \tmpSUM * 360}


A possible solution using PSTricks with siunitx is as follows:

\documentclass{article}

\usepackage[
round-mode = places,
round-precision = 0
]{siunitx}
\usepackage{xfp}

\newcommand*\total{\fpeval{\honey+\pollen+\water}}
\newcommand*\Honey{\fpeval{\honey/\total*100}}
\newcommand*\Pollen{\fpeval{\pollen/\total*100}}
\newcommand*\Water{\fpeval{\water/\total*100}}

\def\pieSlice[#1](#2)#3#4#5{%
\rput(psChartI#2){\shortstack[c]{%
\SI{#3}{\g}\strut\\[-1ex]
\SI{#4}{\percent}\strut}}
\ncline{psChartO#2}{psChart#2}
\nput{#1}{psChartO#2}{#5}}

% parameters
\def\honey{1671}
\def\pollen{1015}
\def\water{621}

\begin{document}

\psset{nodesepB = -5pt}
\begin{pspicture}(-3,-3.5)(4.1,4.1)
\psChart[
userColor = {red!60, green!60, blue!60},
chartNodeO = 1.2,
linewidth = 0
]{\honey,\pollen,\water}{}{3}
\pieSlice[90](1){\honey}{\Honey}{Honey}
\pieSlice[-90](2){\pollen}{\Pollen}{Pollen}
\pieSlice[0](3){\water}{\Water}{Water}
\end{pspicture}

\end{document}


Update

I think I might have misunderstood your request; here is a version showing only the absolute values:

\documentclass{article}

\usepackage{siunitx}

\def\pieSlice[#1](#2)#3#4{%
\rput(psChartI#2){\SI{#3}{\g}}
\ncline{psChartO#2}{psChart#2}
\nput{#1}{psChartO#2}{#4}}

% parameters
\def\honey{1671}
\def\pollen{1015}
\def\water{621}

\begin{document}

\begin{pspicture}(-3,-3.5)(4.1,4.1)
\psChart[
userColor = {red!60, green!60, blue!60},
chartNodeO = 1.2,