在 pgfplots 中读取和处理数据

在 pgfplots 中读取和处理数据

我有一个标准文本文件,两列,空格分隔,包含要绘制的 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,

相关内容