1
我很难让gnuplot
脚本正常工作。基本上,我有六个数据文件,我想绘制在同一个文件中适合每个数据集。Gnuplot循环装配,统计和绘图
它变得有点复杂,因为我必须在绘图之前重新格式化数据。为此,我正在使用stats
命令。这就是问题所在。最终的绘图命令包含一个for
循环,其中数据格式化完成。每个stats
命令生成统计数据的前缀Potentiali
,其中i
从1到6
现在的问题是,我怎么能在剧情循环访问此运行指标?
这是我的脚本:
#!/bin/bash
gnuplot << EOF
set terminal epslatex color size 16cm,11cm
set output "strain-energy.tex"
set xrange [-10:10]
set yrange [0:*]
fstr(N) = sprintf('f%d(x) = a%d*x**7 + b%d*x**6 + c%d*x**5 + d%d*x**4 + e%d*x**3 + f%d*x**2 + g%d*x + h%d', N, N, N, N, N, N, N, N, N)
eval(fstr(1))
fitstr(N) = sprintf('set fit quiet; fit [-10:10] f%d(x) ''/path/Shift_%d/potential.dat'' every ::1 using (\$1-Potential%d_pos_min_y):(\$2-Potential%d_min_y) via a%d,b%d,c%d,d%d,e%d,f%d,g%d,h%d', N, N, N, N, N, N, N, N, N, N, N, N)
do for [i=1:6] {
stats "/path/Shift_".i."/potential.dat" every ::1 using (\$1):(\$2) prefix "Potential".i nooutput
eval(fstr(i))
eval(fitstr(i))
}
plot for [i=1:6] "/path/Shift_".i."/potential.dat" every ::1 using (100*((\$1-Potential.i._pos_min_y)/Potential_pos_min_y)):(1000*(\$2-Potential_min_y)) ls i title "\\\footnotesize{C".i."}", f1(x) ls 1, f2(x) ls 2, f3(x) ls 3, f4(x) ls 4, f5(x) ls 5, f6(x) ls 6
set output
EOF
我真的很感激,如果有人有时间研究这个,因为我正在接近最后期限。 – Casimir 2014-09-29 16:43:27
如果您删除了不必要的代码并专注于问题,这将有所帮助,因此任何愿意帮助的用户都不会灰心。这是一个相关的问题(http://stackoverflow.com/questions/23671742/preventing-gnuplot-from-evaluating-function-for-each-data-point),你可以将你的值存储在一个列表中,然后访问使用'word()'函数的元素。 – Miguel 2014-09-29 18:02:59
我知道,我通常不会发布这种质量的问题,但我真的很匆忙。我清理了一下我的剧本。希望有所帮助。 – Casimir 2014-09-29 18:21:18