我正在使用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的拟合图,如所示。另外,我想绘制范围120到225的相同图形,如图中所示。
现在我想要一个包含两条黑线和红线的图。
我怎样才能做到这一点?
提前致谢。
答案 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)对于坡度变化的位置。