如何使用 Gnuplot 在同一张图上绘制 for cycles?
How to plot on the same graph with for cycles with Gnuplot?
我想拟合多个数据集并将结果绘制在同一张图上,我正在做的是:
do for [i=2:500]{
fit f(x) "myData" using 1:i via a,b
plot f(x)
}
拟合效果很好,最大的问题是这段代码在每次迭代时都会产生不同的图。我想将所有拟合函数都放在一个图中。有什么办法吗?
我猜你不能在同一个循环中安装和绘制。嗯,会有 multiplot
环境(检查 help multiplot
),但我想这不是你的主意。
因此,您可以适合 do for
循环并将适合的参数存储在数组中以供以后在绘图期间使用。
您没有指定任何功能,所以我假设了一些东西。检查以下最小化示例:
代码:
### fitting in a loop
reset session
$Data <<EOD
1 1 6 4
2 4 10 1
3 9 15 0
4 16 22 1
5 25 31 4
6 36 42 9
7 49 55 16
EOD
f(x,a,b,c) = a*(x-b)**2 + c
colMin = 2
colMax = 4
set fit quiet nolog
array A[colMax]
array B[colMax]
array C[colMax]
do for [col=colMin:colMax] {
a=1; b=1; c=1 # some initial values, sometimes 0 or NaN is not a good start
fit f(x,a,b,c) $Data u 1:col via a,b,c
A[col] = a; B[col] = b; C[col] = c
}
set key top left
plot for [col=colMin:colMax] $Data u 1:col w p pt 7 title sprintf("Column %d",col), \
for [col=colMin:colMax] f(x,A[col],B[col],C[col]) w l \
title sprintf("a=%.2f, b=%.2f, c=%.2f",A[col],B[col],C[col])
### end of code
结果:
我想拟合多个数据集并将结果绘制在同一张图上,我正在做的是:
do for [i=2:500]{
fit f(x) "myData" using 1:i via a,b
plot f(x)
}
拟合效果很好,最大的问题是这段代码在每次迭代时都会产生不同的图。我想将所有拟合函数都放在一个图中。有什么办法吗?
我猜你不能在同一个循环中安装和绘制。嗯,会有 multiplot
环境(检查 help multiplot
),但我想这不是你的主意。
因此,您可以适合 do for
循环并将适合的参数存储在数组中以供以后在绘图期间使用。
您没有指定任何功能,所以我假设了一些东西。检查以下最小化示例:
代码:
### fitting in a loop
reset session
$Data <<EOD
1 1 6 4
2 4 10 1
3 9 15 0
4 16 22 1
5 25 31 4
6 36 42 9
7 49 55 16
EOD
f(x,a,b,c) = a*(x-b)**2 + c
colMin = 2
colMax = 4
set fit quiet nolog
array A[colMax]
array B[colMax]
array C[colMax]
do for [col=colMin:colMax] {
a=1; b=1; c=1 # some initial values, sometimes 0 or NaN is not a good start
fit f(x,a,b,c) $Data u 1:col via a,b,c
A[col] = a; B[col] = b; C[col] = c
}
set key top left
plot for [col=colMin:colMax] $Data u 1:col w p pt 7 title sprintf("Column %d",col), \
for [col=colMin:colMax] f(x,A[col],B[col],C[col]) w l \
title sprintf("a=%.2f, b=%.2f, c=%.2f",A[col],B[col],C[col])
### end of code
结果: