我试图在gnuplot的循环中绘制大约105个文件。 这就是我在终端中输入的内容。
i=0.0
n=0.052
set terminal jpeg
load "plot.plt"
这是我在plot.plt
中的内容filename = "mean_230_1.6_A".i.".dat"
plotfile = "mean_230_1.6_A".i."jpg"
print filename." ".plotfile
set output plotfile
plot "PSD_230.dat" u 2:3 w lines , filename using 1:2:3 w yerr pt 7
set output
i=i+0.0005
if (i <= n) reread
然而,然后我执行命令。我收到这个错误:
&#34; plot.plt&#34;,第1行:内部错误:STRING运算符应用于非STRING类型
我不知道该怎么做。我之前使用过类似的代码,但它确实有效。
答案 0 :(得分:1)
我猜你是否遇到了将i(float)与字符串连接的问题?
尝试sprintf("myfilename_%f.jpg", i)
创建文件名。
答案 1 :(得分:0)
我会尝试使用for
循环:
set terminal jpeg
files = system("ls mean*.dat") #stores all filenames
output = system("ls mean*.dat | sed -e 's/.dat/.jpg/'") #stores all outputs
do for [i=1:words(files)]{
filename = word(files,i) #select filename number i
plotfile = word(output,i) #select corresponding output
print filename." ".plotfile
set output plotfile
plot "PSD_230.dat" u 2:3 w lines , filename using 1:2:3 w yerr pt 7
set output
}
如果您的任何文件名包含空格,请将system
函数更改为:
files = system("ls mean*.dat | xargs -I line echo \\\"line\\\" ")
output = system("ls mean*.dat | sed -e 's/.dat/.jpg/'" | xargs -I line echo \\\"line\\\" ")
关于您获得的错误,您应该使用@ allo的答案,但如果文件名的小数位数不同,则效率不高:
i=0.0005
plotfile = sprintf("mean_%f.jpg", i) # 6 decimals: mean_0.000500.jpg
plotfile = sprintf("mean_%.4f.jpg", i) # 4 decimals: mean_0.0005.jpg
i=0.001
plotfile = sprintf("mean_%.4f.jpg", i) # 4 decimals: mean_0.0010.jpg
plotfile = sprintf("mean_%.3f.jpg", i) # 3 decimals: mean_0.001.jpg
我认为,如果文件名中的数字小数为4或更少,则最好使用%g
而不是%f
格式说明符:
sprintf("mean_%g.jpg", 1) # 0 decimals: mean_1.jpg
sprintf("mean_%g.jpg", 0.01) # 2 decimals: mean_0.01.jpg
sprintf("mean_%g.jpg", 0.0001) # 4 decimals: mean_0.0001.jpg
sprintf("mean_%g.jpg", 0.00001) # 5 decimals, unwanted result: mean_1e-05.jpg