我正在尝试从内联数据文件中生成带有 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,现在就可以了。
问候,戴夫。