![TikZ:如果用于 tikzpicture,如何将特定表传递给 \pgfplotstableset](https://linux22.com/image/290129/TikZ%EF%BC%9A%E5%A6%82%E6%9E%9C%E7%94%A8%E4%BA%8E%20tikzpicture%EF%BC%8C%E5%A6%82%E4%BD%95%E5%B0%86%E7%89%B9%E5%AE%9A%E8%A1%A8%E4%BC%A0%E9%80%92%E7%BB%99%20%5Cpgfplotstableset.png)
我创建了以下代码,它似乎可以完成我想要的功能。即向表中添加一个额外的行,\IDA
该行是四个值的平均值。然后可以将该行用于绘图tikzpicture
。
\documentclass[tikz]{standalone}
\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}
\begin{filecontents}{FileA.dat}
step ts1 ts2
1 3 4
2 7 6
3 4 6
4 5 6
5 5 7
6 9 3
\end{filecontents}
\begin{filecontents}{FileB.dat}
step tHIws
1 3
2 7
3 4
4 5
5 5
6 9
\end{filecontents}
% for calculations
\pgfplotstableread{FileB.dat}\SST
\pgfplotstableread{FileA.dat}\IDA
\pgfplotstableset{
create on use/tHIws/.style={
create col/expr={\thisrow{ts1}+\thisrow{ts2})/2}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis x line=bottom,
axis y line=left,
tick align=outside,
xlabel=\texttt{step},
ylabel={$\theta_{a}$},
legend pos= north west,
legend columns=6,
legend style={fill=none, draw=none},
cycle multi list={
color list%
},
ymajorgrids,
]
\addplot table
[x=step, y=tHIws]
{\SST};
\addlegendentry{SSTe}
\addplot +[mark=*] table
[x=step, y=tHIws]
{\IDA};
\addlegendentry{IDA}
\addplot table
[x=step, y expr=(\thisrow{ts1}+\thisrow{ts2})/2]
{FileA.dat};
\addlegendentry{IDA}
\end{axis}
\end{tikzpicture}
\end{document}
但是,由于我需要对许多表格/图形执行此操作,因此我想以某种方式将这两个命令合并为一个,或者至少确保上述命令\pgfplotstableset
仅适用于表格\IDA
。
有没有办法做到这一点?
根据 percusse 的回答进行了编辑。我实际上曾尝试将其转移到 tikxpictures,但目前失败了。
编辑2:完整示例!
编辑 3:现在有了内部数据。但是我在编译时收到错误:“无法从表‘FileA.dat’中检索列‘step’。”但我似乎无法发现错误 - 我想我是“盲目”
编辑 4:为内联文件内容添加了缺失的 usepackage
答案1
关于编辑,将表达式放入样式中并在需要时应用它会更容易。在这里我称之为mymedian
\documentclass{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.10}
\pgfplotstableread{
step ts1 ts2 ts3 ts4
1 3 4 11 14
2 7 6 22 26
3 4 6 34 31
4 5 6 45 46
5 5 7 55 57
6 9 3 69 63
}\SST
% for calculations
\pgfplotsset{mymedian/.style={
x=step, y expr=(\thisrow{ts1}+\thisrow{ts2}+\thisrow{ts3}+\thisrow{ts4})/4
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis x line=bottom,
axis y line=left,
tick align=outside,
xlabel=\texttt{step},
ylabel={$\theta_{a}$},
legend pos= north west,
legend columns=6,
legend style={fill=none, draw=none},
cycle multi list={
color list%
},
ymajorgrids,
]
\addplot table[mymedian] {\SST};
\addlegendentry{SSTmean}
\addplot table[x=step,y=ts3] {\SST};
\addlegendentry{SSTS3}
\end{axis}
\end{tikzpicture}
\end{document}