绘制表格时,如何计算表达式中的列总和?

绘制表格时,如何计算表达式中的列总和?

我有一些表格形式的数据,如下面的代码所示。第二列是 y 轴。整列总和为 100。对于要绘制的每个 y 值,我想绘制y_value / y_total例如10 / 10020 / 100等。

我尝试使用 来执行此操作y expr,但它仅限于访问当前行中的列。无论如何,重复计算每列的总和似乎并不理想。理想情况下,可以对列求和一次,然后我可以使用y expr我事先计算的总和开始绘图。

我已经看到了一种通过转置表然后将其转置回来计算列总和的方法,但是总和存储在一行中,我无法总是访问它y expr

我怎样才能做到这一点?

\documentclass{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}

\begin{document}

\pgfplotstableread{
  1 10
  2 20
  3 30
  4 40
}{\data}

\begin{tikzpicture}
  \begin{axis}
    % The 100 is hard-coded currently.
    \addplot table[y expr=\thisrow{1}/100] {\data};
  \end{axis}
\end{tikzpicture}

\end{document}

答案1

因此,您追求的是类似以下内容的东西...有关详细信息,请查看代码中的注释。

% used PGFPlots v1.18.1
\documentclass[border=5pt]{standalone}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
        \pgfplotstableread{
          x y
          1 20
          2 40
          3 60
          4 80
        }{\loadedtable}

        % add a column in the table summing up the values % accumulatively
        % with the sum of all values one can calculate the percentages of the values
        \pgfplotstablecreatecol[
            expr accum={
                round(\pgfmathaccuma) + \thisrow{y}
            }{0}
        ]{sum}{\loadedtable}

            % get the number of data rows of the loaded table
            \pgfplotstablegetrowsof{\loadedtable}
                \pgfmathsetmacro{\LastRow}{\pgfplotsretval-1}
            % now get the last entry of the «sum» column which contains the
            % sum of the values
            \pgfplotstablegetelem{\LastRow}{sum}\of{\loadedtable}
                \pgfmathsetmacro{\Sum}{\pgfplotsretval}
    \begin{axis}
        \addplot table[x=x,y expr=\thisrow{y}/\Sum] {\loadedtable};
    \end{axis}
\end{tikzpicture}
\end{document}

该图显示了上述代码的结果

相关内容