我的目标是向 \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
)。