绘制两个不同水平范围值的拟合线性图

时间:2014-08-11 05:36:38

标签: gnuplot

我正在使用gnuplot绘制两张图。第一个图是实际数据,第二个图是数据的拟合。

我用于绘制此脚本的脚本如下所示:

#!/usr/bin/gnuplot

reset 


set terminal png enhanced
set terminal pngcairo enhanced color dashed
set output 'msd-maltoLyo12per-225ns.png'

##########################################
set macros

labelSIZE="font 'Arial,24'"
ticFONT="font 'Arial,16"
set key font 'Arial,14'
set key spacing 1.5 samplen 5 
##########################################

set xrange [0:225]  
set yrange [0:11000]


set xtic @ticFONT
set ytic @ticFONT
set xtics out nomirror
set ytics out nomirror
##############################

set style line 1 lt 1 lc rgb "red"  lw 2.0 
set style line 2 lt 2 lc rgb "blue"     lw 2.0 
set style line 3 lt 3 lc rgb "coral"    lw 2.0 
set style line 4 lt 4 lc rgb "green"    lw 2.0 
set style line 5 lt 5 lc rgb "black"    lw 2.0 

##############################


f(x)=a+b*x
fit [120:225] f(x) 'diff-xy-maltoLyo12per.dat' via a,b

plot    'diff-xy-maltoLyo12per.dat' using 1:2 with lines linestyle 1 title "{/Symbol b}Mal-C_{12}", f(x) lw 3.0 lc rgb 'black' 

这里我绘制了从1到120的拟合图,如here所示。另外,我想绘制范围120到225的相同图形,如图here中所示。

现在我想要一个包含两条黑线和红线的图。

我怎样才能做到这一点?

提前致谢。

1 个答案:

答案 0 :(得分:2)

使用您已有的脚本,您可以使用两个函数分别放入不同的范围,然后使用条件图,如果x< 120和另一个如果x> 120:

f1(x)=a1+b1*x
fit [0:120] f1(x) 'diff-xy-maltoLyo12per.dat' via a1,b1

f2(x)=a2+b2*x
fit [120:225] f2(x) 'diff-xy-maltoLyo12per.dat' via a2,b2

f(x) = x < 120 ? f1(x) : f2(x)

plot    'diff-xy-maltoLyo12per.dat' using 1:2 with lines linestyle 1 title "{/Symbol b}Mal-C_{12}", f(x) lw 3.0 lc rgb 'black' 

现在,我将采用的方法是生成一个特殊的拟合函数,其参数将为我提供斜率因拟合本身而变化的点。假设您调用该点x0(函数的值为y0),其左侧的斜率为m1,右侧的斜率为m2 。然后左边的函数的格式为m1*(x-x0)+y0,右边的函数的格式为m2*(x-x0)+y0。整个函数可以在gnuplot中定义为:

f(x) = x < x0 ? m1*(x-x0)+y0 : m2*(x-x0)+y0

你可以fit f(x) "data" via x0, m1, m2, y0。您也可以使用步进函数在没有条件的情况下生成此函数:

f(x) = m1*(x-x0)*(sgn(x0-x)+1)/2 + m2*(x-x0)*(sgn(x-x0)+1)/2 + y0

在您适应之后,您可能需要提供一些初始值,您可以print x0并且您将获得最佳价值(如您所知,在您的情况下应该接近120)对于坡度变化的位置。