Gnuplot:每个文件一个图

时间:2014-02-14 13:15:00

标签: bash gnuplot

我正在尝试绘制多个文件的第1列和第3列,其中每个文件应该绘制为自己的output.png。 我的文件名称如下:

VIB2--135--398.6241
VIB2--136--408.3192
VIB2--137--411.3725
...

文件名中的第一个数字是整数,范围是135-162。第二个数字只是一个十进制数字,值之间没有规则的间距。 基本上我想做这样的事情

plot for [a=135:162] 'VIB2--'.a.'--*' u 1:3 w l

虽然这不起作用,当然,因为'*'只是我从bash知道的占位符,我不知道,如果在gnuplot中有类似的东西。 此外,如上所述,每个文件应该绘制到它自己的output.png中,其中两个数字应该在输出名称中,例如, VIB2--135--398.6241.png。

我尝试为此创建一个bash脚本,如(已编辑):

#!/bin/bash

for file in *
do

gnuplot < $file

set xtics 1
set xtics rotate
set terminal png size 1920,1080 enhanced
set output $file.png
plot "$file" u 1:3 w l 

完成 但我还是得到了

gnuplot> 1    14   -0.05
         ^
         line 0: invalid command
gnuplot> 2    14    0.01
         ^
         line 0: invalid command
...

实际上是我输入文件中的数字。所以gnuplot认为,我想绘制的数字是命令......?此外,当到达文件的末尾时,我收到以下错误消息

#PLOT 1
plot: an unrecognized command `0x20' was encountered in the input
plot: the input file `VIB2--162--496.0271' could not be parsed

我已经看到了一些类似于我的问题,但解决方案并没有真正起作用,我无法添加评论,因为我没有声誉。 请帮我解决一下这个。

1 个答案:

答案 0 :(得分:1)

gnuplot < $file启动gnuplot并将$file的内容作为输入提供给它。这意味着gnuplot现在将尝试执行数据文件中无法工作的命令。

你想要的是&#34; here here&#34;:

gnuplot <<EOF
set xtics 1
set xtics rotate
set terminal png size 1920,1080 enhanced
set output $file.png
plot "$file" u 1:3 w l 
EOF

它的作用是:shell读取文本到庄严EOF的行,替换所有变量,将其放入临时文件,然后启动gnuplot将临时文件作为输入

请注意文件名不包含空格,否则set output $file.png将无效。为了安全起见,您应该使用set output "$file.png",但我的gnuplot有点生锈。