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

时间:2015-06-21 16:02:25

标签: plot 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)作为数据文件。但是我该怎么做或者有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案。 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: Ermahgerd, it werks!