如何在 gnuplot 中绘制两条拟合线的交点?

How do I plot the intersection of two fit lines in gnuplot?

我有一个看起来像这样的数据文件:

# Test of 6
0.1 3.2 
0.4 5.9 
0.7 8.0 
0.9 10.1


0.1 1.5 
0.4 4.3 
0.7 9.5 
0.9 13.5

# Test of 10
0.1 5.5 
0.4 6.3 
0.7 6.9 
0.9 8.5 


0.1 0.5 
0.4 3.3 
0.7 8.5 
0.9 15.5

# Test of 15
0.1 12.5
0.4 13.3
0.7 13.5
0.9 15.5


0.1 1.5 
0.4 7.3 
0.7 15.5
0.9 16.5

然后我使用 gnuplot 找到每组的拟合线,以及两条拟合线的交叉点:

set terminal pngcairo enhanced
set output 'image.png'

unset key 

set xrange [0:20]
set yrange [0:1]

f(x) = a*x + b 
g(x) = c*x + d 

fit f(x) "data.dat" i 0 u 1:2 via a,b 
fit g(x) "data.dat" i 1 u 1:2 via c,d 
p1 = (d - b) / (a - c)
fit f(x) "data.dat" i 2 u 1:2 via a,b 
fit g(x) "data.dat" i 3 u 1:2 via c,d 
p2 = (d - b) / (a - c)
fit f(x) "data.dat" i 4 u 1:2 via a,b 
fit g(x) "data.dat" i 5 u 1:2 via c,d 
p3 = (d - b) / (a - c)

# what is the real way?
# set label at 6, p1 "" point pointtype 7 pointsize 2
# set label at 10, p2 "" point pointtype 7 pointsize 2
# set label at 15, p3 "" point pointtype 7 pointsize 2
# plot 1/0

我可以使用标签来设置我想要的点,但我真的希望能够找到这些点的拟合线。如果我能治疗 (6,p1),我想我能做到; (10,p2); (15,p3) 作为数据文件。但是我该怎么做,或者有更简单的方法吗?

好的,我找到了解决方案。 Gnuplot 已命名数据块。您既可以打印到数据块也可以从数据块绘图。使用问题中的数据,最终的绘图文件是:

set terminal pngcairo enhanced
set output 'image.png'

unset key

set xrange [0:20]
set yrange [0:1]

f(x) = a*x + b
g(x) = c*x + d

fit f(x) "data.dat" i 0 u 1:2 via a,b
fit g(x) "data.dat" i 1 u 1:2 via c,d
p1 = (d - b) / (a - c)
fit f(x) "data.dat" i 2 u 1:2 via a,b
fit g(x) "data.dat" i 3 u 1:2 via c,d
p2 = (d - b) / (a - c)
fit f(x) "data.dat" i 4 u 1:2 via a,b
fit g(x) "data.dat" i 5 u 1:2 via c,d
p3 = (d - b) / (a - c)

set print $points
print 6,p1
print 10,p2
print 15,p3

fit f(x) $points u 1:2 via a,b
plot $points w p pt 7 ps 2, f(x)

这会生成如下 png: