File Gnuplot:从编号和文件打印

File Gnuplot:从编号和文件打印,file,for-loop,plot,gnuplot,File,For Loop,Plot,Gnuplot,我有几个文件,每个文件都有相同的行数。文件名为“something_integer.txt”,如“a100.txt”、“a200.txt”、“a300.txt”。。。所以(整数是每100个,有些东西总是一样的)。每一行都与其他文件的同一行及时连接,但不与其他行连接 我想在一个图形中绘制所有文件的所有第1行,在另一个图形中绘制所有文件的所有第2行(但与前一个图形重叠),依此类推。如何使用gnuplot实现这一点 我知道我需要使用for循环。我的想法是(仅针对第1行和第2行): 但问题出现了: 我之

我有几个文件,每个文件都有相同的行数。文件名为“something_integer.txt”,如“a100.txt”、“a200.txt”、“a300.txt”。。。所以(整数是每100个,有些东西总是一样的)。每一行都与其他文件的同一行及时连接,但不与其他行连接

我想在一个图形中绘制所有文件的所有第1行,在另一个图形中绘制所有文件的所有第2行(但与前一个图形重叠),依此类推。如何使用gnuplot实现这一点

我知道我需要使用for循环。我的想法是(仅针对第1行和第2行):

但问题出现了:

  • 我之所以把“??????????????”放在这里,是因为我想把第5列的值写成y,而把第I列的值写成x,而不是第I列的值。你怎么能做到
  • 如果每次循环继续,我都有一个绘图指令,以前的点会被擦除吗?他们会像我想的那样连接吗
    第一个问题很简单:必须使用括号
    使用(i):5

    如果我理解正确,对于第二个,您必须在
    绘图中移动循环:

    plot for [i=100:5000:100] \
        sprintf('something_%d.txt',i) every 1::1::1 using (i):5, \
        sprintf('something_%d.txt',i) every 1::2::2 using (i):5
    

    这就是你想要的吗?

    我认为在gnuplot中尝试这样做是过分的(但我喜欢过分的解决方案!)。最好使用
    awk
    或类似的工具在bash中进行一些预处理。但是,您仍然可以在gnuplot代码中使用
    awk
    命令。这正是您想要的:

    loop = ""; do for [i=100:5000:100] { loop = sprintf("%s %i", loop, i) }
    
    file(n) = "< for i in ".loop."; do awk -v i=$i 'NR==".n."{print i, $5}' a${i}.txt; done"
    
    plot file(1) w l, file(2) w l
    
    loop=”“;为[i=100:5000:100]{loop=sprintf(“%s%i”,loop,i)}
    文件(n)=“

    n
    是您正在选择的行,因此
    文件(1)
    选择所有文件中的第1行,
    文件(2)
    选择所有文件中的第2行,依此类推。

    不完全正确。这对于开始来说是可以的,但我想用一条线连接第1行的所有点,用另一条线连接第2行的所有点。这样,每个点都像一系列的数据。
    loop = ""; do for [i=100:5000:100] { loop = sprintf("%s %i", loop, i) }
    
    file(n) = "< for i in ".loop."; do awk -v i=$i 'NR==".n."{print i, $5}' a${i}.txt; done"
    
    plot file(1) w l, file(2) w l