如何在 PGFPlots 中的 \addplot 命令中添加另一个图?

如何在 PGFPlots 中的 \addplot 命令中添加另一个图?

我的目标是向 \addplot 命令添加另一个图,希望这个小例子能够展示出我正在尝试做的事情:

\documentclass{standalone}
\usepackage{pgfplotstable}
\begin{document}

\pgfplotstableread[col sep=comma]{
procs, none
16, 6.079748e+03
32, 3.624823e+03
64, 1.685646e+03
128, 9.180763e+02
256, 5.977239e+02
512, 4.410280e+02
}\scalability

\begin{tikzpicture}
  \begin{loglogaxis}[
    ylabel={Time (sec)},
    xtick=data,
    xticklabels from table={\scalability}{procs},
    table/x=procs,
    set scaling/.code={
      \edef\xcol{\pgfkeysvalueof{/pgfplots/table/x}}
      \pgfplotstablegetelem{0}{\xcol}\of{\scalability}
      \edef\proc{\pgfplotsretval}
      \pgfplotstablegetelem{0}{\pgfkeysvalueof{/pgfplots/y}}\of{\scalability}
      \edef\offset{\pgfplotsretval}
      \pgfplotsset{table/y expr=\offset * \proc / \thisrowno{0}}
      \pgfplotsextra{
        \draw (1,1) -- (256,256);              % this is drawn
        \addplot table[y=none] {\scalability}; % this is not
      }
    },
    scaling/.style={
      forget plot,
      set scaling,
    },
    forget plot style={opacity=0.4},
    ]

    \addplot +[y=none,scaling] table {\scalability};
    % \addplot table[y=none] {\scalability};

  \end{loglogaxis}
\end{tikzpicture}

\end{document}

我希望看到的是:

在此处输入图片描述

但摆弄 .code 功能(以及execute at end plot)似乎没有什么能够调用另一个\addplot仅较低级别的 TikZ 命令(\draw\path等):

在此处输入图片描述

有没有办法再\addplot附加一个?

答案1

您的方法不起作用,因为\addplot它被设计为放置在轴内——并且\pgfplotsextra被设计为不处理轴内的东西(而是推迟它们的处理)。

如果你想使用\addplot,你将其放入轴中。

但从我对您的申请的理解来看,我相信您可以简单地将表达式评估内容直接放在相关情节的前面:

在此处输入图片描述

\documentclass{standalone}
\usepackage{pgfplotstable}
\begin{document}

\pgfplotstableread[col sep=comma]{
procs, none
16, 6.079748e+03
32, 3.624823e+03
64, 1.685646e+03
128, 9.180763e+02
256, 5.977239e+02
512, 4.410280e+02
}\scalability

\begin{tikzpicture}
  \begin{loglogaxis}[
    ylabel={Time (sec)},
    xtick=data,
    xticklabels from table={\scalability}{procs},
    table/x=procs,
    table/y=none,
    forget plot style={opacity=0.4},
    ]

      \pgfplotstablegetelem{0}{\pgfkeysvalueof{/pgfplots/table/x}}\of{\scalability}
      \edef\proc{\pgfplotsretval}
      \pgfplotstablegetelem{0}{\pgfkeysvalueof{/pgfplots/table/y}}\of{\scalability}
      \edef\offset{\pgfplotsretval}

    \addplot +[forget plot] table[y expr=\offset * \proc / \thisrowno{0}] {\scalability};
    \addplot table[y=none] {\scalability};

  \end{loglogaxis}
\end{tikzpicture}

\end{document}

这似乎与您的请求完全相同 - 没有键定义开销。它之所以有效,是因为您的临时变量会立即被评估\addplot;它们不会被推迟(因为它们是评估坐标所必需的)。

您可能希望消除这些\pgfkeysvalueof{/pgfplots/table/x}语句以提高稳健性(您的示例没有正确定义table/y)。

相关内容