我是新手pgfplots
,希望您能帮我解答这个问题。基本上,我需要从仅包含数据列表(一列)的文件中读取 y 值,通过 y=(y-min(Y))/(max(Y)-min(Y)) 对每个值进行归一化,其中 max(Y) 是列表中的最大值,min(Y) 是列表中的最小值,然后绘制它们。例如,如果我有 {1,2,3,4},那么在绘图上,y 的值将是 {0, 1/3, 2/3,1}。
我使用\addplot table [x expr=\coordindex, y index = 0] {filename};
在图表上绘制 x 和 y。y 的规范化表达式是什么?是否有现有函数可以执行此操作?如果没有,我们可以提取其中的 max(Y) 和 min(Y) 吗pgfplots
?
答案1
正如下面的评论中已经讨论过的,当您拥有大量数据时,在外部预处理数据是最好的解决方案。
这里有一个pgfplots
借助的解决方案pgfplotstable
。
\documentclass[border=2pt]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable} % needed to sort the data table
% store data in TXT file
\begin{filecontents}{data.txt}
y
2
1
4
3
\end{filecontents}
\begin{document}
\begin{tikzpicture}
% store sorted data in `\data'
\pgfplotstablesort[sort key=y]{\data}{data.txt}
% store the first and last value of the (sorted) `\data' table
% which correspond to the min and max values
\pgfplotstablegetelem{0}{y}\of{\data}
\pgfmathsetmacro{\Min}{\pgfplotsretval}
\pgfplotstablegetrowsof{\data}
\pgfmathsetmacro{\Max}{\pgfplotsretval-1}
\pgfplotstablegetelem{\Max}{y}\of{\data}
\pgfmathsetmacro{\Max}{\pgfplotsretval}
\begin{axis}[
only marks,
]
\addplot
table [
x expr=\coordindex,
y expr=(\thisrow{y}-\Min)/(\Max-\Min),
] {data.txt};
\end{axis}
\end{tikzpicture}
\end{document}