我想创建一个包含多条线的二维图。
该图应通过第一个 txt 文件中的数据进行归一化。我想用之前以某种方式从我的第一个 txt 文件中提取的 y 值除以所有图表的 y 值。
如果不同文件的 y 值分别命名为 y1、y2 和 y3,则绘制的 y 值应该是 y1/y1、y2/y1 和 y3/y1。
由于我必须制作几个这样的图,所以如果它能够尽可能地“自动化”那就好了。
提前致谢!
梅威瑟:
\documentclass[final]{scrreprt}
\usepackage{filecontents}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{filecontents*}{x_y_values1.txt}
x y
1 1
2 2
3 3
\end{filecontents*}
\begin{filecontents*}{x_y_values2.txt}
x y
1 2
2 3
3 4
\end{filecontents*}
\begin{filecontents*}{x_y_values3.txt}
x y
1 3
2 4
3 5
\end{filecontents*}
\begin{document}
\begin{figure}
\pgfplotsset{width=\textwidth}
\begin{tikzpicture}
\begin{axis}[]
\addplot[] % y-values should be devided by y-value from x_y_values1.txt
table [col sep=space,x expr=\thisrow{x},y expr=\thisrow{y}]
{x_y_values1.txt};
\addplot[] % y-values should be devided by y-value from x_y_values1.txt
table [col sep=space,x expr=\thisrow{x},y expr=\thisrow{y}]
{x_y_values2.txt};
\addplot[] % y-values should be devided by y-value from x_y_values1.txt
table [col sep=space,x expr=\thisrow{x},y expr=\thisrow{y}]
{x_y_values3.txt};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
答案1
使用 pgfplotstable,我将第一个文件/表中的 y 列复制到其他每个文件/表中。其实\pgfplotstableclear
并不需要;我只是觉得用起来更好。
\documentclass[final]{scrreprt}
\usepackage{filecontents}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}
\begin{filecontents*}{x_y_values1.txt}
x y
1 1
2 2
3 3
\end{filecontents*}
\begin{filecontents*}{x_y_values2.txt}
x y
1 2
2 3
3 4
\end{filecontents*}
\begin{filecontents*}{x_y_values3.txt}
x y
1 3
2 4
3 5
\end{filecontents*}
\begin{document}
\begin{figure}
\pgfplotstableread[col sep=space]{x_y_values1.txt}\firsttable
\pgfplotsset{width=\textwidth}
\begin{tikzpicture}
\begin{axis}[]
\foreach \filename in {x_y_values1.txt, x_y_values2.txt, x_y_values3.txt} {%
\pgfplotstableread[col sep=space]{\filename}\thistable
\pgfplotstablecreatecol[create col/copy column from table=\firsttable{y}]{y scale}\thistable
\addplot[] table [x=x, y expr={\thisrow{y} / \thisrow{y scale}}] \thistable;
\pgfplotstableclear\thistable};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}