带有命令数据的箱线图

带有命令数据的箱线图

我正在尝试生成一个箱线图,pgfplots其中绘制的数据是由其他命令生成的。这里是 MCVE:

\documentclass{article}
 \usepackage{pgfplots}
 \pgfplotsset{compat=1.13}
 \usetikzlibrary{pgfplots.statistics}

 \newcommand{\addBoxplot}[1]{%
  \begin{tikzpicture}%
   \begin{axis}%
    \addplot[boxplot = {average = auto}] table[row sep=\\,y index=0] {#1};%
   \end{axis}%
  \end{tikzpicture}%
 }

 \newcommand{\getData}{data\\ 1\\ 3\\}

\begin{document}
 % Try 1
 \addBoxplot{data\\ 1\\ 3\\ }

 % Try 2
 \addBoxplot{\getData}
\end{document}

尝试 1 表明该\addBoxplot命令按预期工作。尝试 2 是我真正感兴趣的情况。这将生成一个空的箱线图,而不是像尝试 1 一样只给出相同的图。以下是我的输出:

为我输出

问题似乎是\getData评估得太晚,导致\addBoxplot根据无效/空数据生成图表。

我怎样才能\addBoxplot在尝试 2 的背景下实现工作?

答案1

\expandafter可以是你最好的朋友(也可以是你最可怕的噩梦)。

在这种情况下,\addBoxplot不想看到宏名称,它想看到实际数据,因此\getdata必须将宏扩展一次,以便\addBoxplot以它喜欢的形式看到参数。

\documentclass{article}
 \usepackage{pgfplots}
 \pgfplotsset{compat=1.13}
 \usetikzlibrary{pgfplots.statistics}

 \newcommand{\addBoxplot}[1]{%
  \begin{tikzpicture}%
   \begin{axis}%
    \addplot[boxplot = {average = auto}] table[row sep=\\,y index=0] {#1};%
   \end{axis}%
  \end{tikzpicture}%
 }

 \newcommand{\getData}{data\\ 1\\ 3\\}

\begin{document}
 % Try 1
 \addBoxplot{data\\ 1\\ 3\\ }

 % Try 2
 \expandafter\addBoxplot\expandafter{\getData}
\end{document}

在此处输入图片描述

相关内容