pgfplots:从不同文件绘制图表以规范数据

pgfplots:从不同文件绘制图表以规范数据

我想创建一个包含多条线的二维图。

该图应通过第一个 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}

相关内容