![在 pgfplots 中读取和处理数据](https://linux22.com/image/271719/%E5%9C%A8%20pgfplots%20%E4%B8%AD%E8%AF%BB%E5%8F%96%E5%92%8C%E5%A4%84%E7%90%86%E6%95%B0%E6%8D%AE.png)
我有一个标准文本文件,两列,空格分隔,包含要绘制的 x 和 y 数据。我想绘制 x vs -y,即 plot(x,-y)。
一般来说,如何读取数据并在 pgfplots 中绘制它们的函数,例如 (x,-y)、(log x, y)、(x, y^2) 等?
以下代码返回错误
\pgfplotstableread{inputdata.txt}\mydata;
\addplot table [ color=red, only marks, mark=*, mark size=0.5pt, x expr=\thisrowno{1}, y expr=\thisrowno{2}*-1 ] {\mydata};
答案1
您混淆了 的键\addplot
和指令的键table
。
尝试以下方法:
\documentclass{article}
\usepackage{pgfplotstable}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=$x$,ylabel=$-y$]
\pgfplotstableread{inputdata.txt}\mydata;
\addplot [
color=red,
only marks,
mark=*,
mark size=0.5pt,
]
table
[
x expr=\thisrowno{0},
y expr=\thisrowno{1}*-1
] {\mydata};
\end{axis}
\end{tikzpicture}
\end{document}
数据文件如下所示:
x y
1 2
2 -1
3 0
4 2
5 3
6 6
要获得其他转换,如(x,y^2)
,只需提供适当的表达式:
y expr=\thisrowno{1}^2,
log
据我所知,没有可用的功能,但是有自然对数所以你可以写
x expr=ln(\thisrowno{0}),
另外,\thisrowno
如果数据文件中有列标题(如我上面给出的示例),那么您可以编写
x expr=\thisrow{x},
y expr=\thisrow{y},
然后你就不必担心确切的列编号。或者如果你有一个数据文件,如下所示
input output
1 2
2 -1
3 0
4 2
5 3
6 6
你会写
x expr=\thisrow{input},
y expr=\thisrow{output},
不过在后一种情况下,如果你不以某种方式转换数据,你可以直接写
x=input,
y=output,