循环遍历表格以准备箱线图

循环遍历表格以准备箱线图

我正在尝试从内联数据文件中生成带有 2 个箱线图准备图的图形。我从这里获取了此代码以用作起点。鉴于包装器代码允许读取箱线图数据,我的数据有 5 多行,项目将有 ~20 行。目前,读取数据并对每行数据进行 addplot 调用。我试图做的是从循环中调用 addplot。 \foreach \i in {0,1} for each row (row=1 -> row=\i) 不起作用,\pgfplotsinvokeforeach{0,1} (row=#1) 也不起作用,在两种情况下行都未解析。我的代码有效:

\documentclass[crop=true]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.10}  %was 1.8
\usepgfplotslibrary{statistics}
\makeatletter
\pgfplotsset{
    boxplot prepared from table/.code={
        \def\tikz@plot@handler{\pgfplotsplothandlerboxplotprepared}%
        \pgfplotsset{
            /pgfplots/boxplot prepared from table/.cd,
            #1,
        }
    },
    /pgfplots/boxplot prepared from table/.cd,
        table/.code={\pgfplotstablecopy{#1}\to\boxplot@datatable},
        row/.initial=0,
        make style readable from table/.style={
            #1/.code={
                \pgfplotstablegetelem{\pgfkeysvalueof{/pgfplots/boxplot prepared from table/row}}{##1}\of\boxplot@datatable
                \pgfplotsset{boxplot/#1/.expand once={\pgfplotsretval}}
            }
        },
        make style readable from table=lower whisker,
        make style readable from table=upper whisker,
        make style readable from table=lower quartile,
        make style readable from table=upper quartile,
        make style readable from table=median,
        make style readable from table=lower notch,
        make style readable from table=upper notch
}
\makeatother


\pgfplotstableread[row sep=crcr]{
    lw     lq     med    uq     uw\\
    15.10  21.75  26.50  30.88  42.10\\
    10.30  21.70  26.90  31.83  45.30\\
}

\begin{document}
\begin{tikzpicture}
\begin{axis}[boxplot/draw direction=x, ymin=0,
             ytick={1,...,5}, 
             yticklabels={2010,2011,2012,2013,2014},
             xmin=0, xmax=50,]
  \addplot+[
  boxplot prepared from table={
    table=\datatable,
    row=0,
    lower whisker=lw,
    upper whisker=uw,
    lower quartile=lq,
    upper quartile=uq,
    median=med
  }, boxplot prepared
  ]
  coordinates {};

\pgfplotstablegetcolsof{\datatable}
\pgfmathsetmacro\numberofrows{\pgfplotsretval-1}

%\foreach \i in {0,1}{ %...,\numberofrows}{
  \addplot+[
  boxplot prepared from table={
    table=\datatable,
    row=1, %row=\i,
    lower whisker=lw,
    upper whisker=uw,
    lower quartile=lq,
    upper quartile=uq,
    median=med
  }, boxplot prepared
  ]
  coordinates {};
%} %foreach

\end{axis}
\end{tikzpicture}
\end{document}

有人知道如何在单个 addplot 箱线图准备好后进行循环吗?我在 pgfplots 1.10 手册中没有看到任何关于从文件中提取箱线图准备好的数据的内容,在本论坛中也没有看到。此外,我浏览的大多数内容都是针对 pgfplot 的早期版本(<1.10)。pgfplots 1.10 不是原生支持箱线图吗?希望有人能解决这个问题,因为这将非常有用!任何帮助都将不胜感激。一定有更简单的方法可以做到这一点!致以最诚挚的问候,戴夫。

答案1

通过我的实施:

 \pgfplotsinvokeforeach{0,...,\numberofrows}{

我起初使用 row=#1,然后改为 row= #1,现在就可以了。

问候,戴夫。

相关内容