我有N个输入文件,我想将这些文件一起的数据与它们的拟合函数一起绘制成一个单独的图(即所有文件,数据和拟合函数的一个图)。 / p>
经过长时间的摆弄后,我找到了一个解决方案(见下文),但我发现它“麻烦而且丑陋”,我想知道是否有更好,更优雅的方法来实现同样的目标。
我应该说我在Windows下使用gnuplot 5.0。下面的测试脚本没有指定终端(我正在使用windows和wxt进行测试),但最终的脚本将使用pngcairo终端。
我觉得我的解决方案不太理想:
我的测试数据:
data1.dat
100 0.15
200 0.29
300 0.46
400 0.58
data2.dat
100 0.12
200 0.22
300 0.35
400 0.48
data3.dat
100 0.1
200 0.22
300 0.29
400 0.40
我的gnuplot脚本:
set key left
set xrange [0:*]
set yrange [0:0.5]
# user function for linear fit
lin(x) = slope * x + offset
max(a,b) = ((a>=b)? a : b)
file_list = "data1 data2 data3"
x_max = 0
# first write all data of interest into a (memory) table
set table $data
do for [name in file_list] {
filename = name . ".dat"
plot filename u 1:2
print ""
print ""
x_max = max(GPVAL_DATA_X_MAX, x_max)
}
unset table
x_max = max(GPVAL_DATA_X_MAX, x_max)
num_indices = words(file_list)
# now calculate a linear fit for each dataset
set sample 2
set table $fit
do for [i = 0:(num_indices-1)]{
fit lin(x) $data index i using 1:2 via slope, offset
plot [0:x_max][0:0.5] lin(x)
set label (i+1) sprintf("%s = %.3g*x + %.3g", word(file_list, i+1)."(x) ", slope, offset) at 200,(0.20 - 0.05*i)
}
unset table
set title "Data and Linear Fit"
set xlabel "x"
set ylabel "y"
#now we got both data and fit for all files, plot everything at once
plot for [i = 0:(num_indices-1)] $data index i title word(file_list,i+1) with points lc i+1, for [i = 0:(num_indices-1)] $fit index i with lines lc i+1 noti
答案 0 :(得分:1)
总是有愚蠢的蛮力方式。您可以创建一个包含您想要拟合的所有点的新数据文件(例如,在Linux系统中使用" cat data1.dat data2.dat data3.dat> newdata.dat"然后使用新数据)。