通过在水平轴上选择范围来拟合图形和绘制线条
Fitting graph and draw lines by selecting ranges in horizontal axis
我正在尝试绘制图表并使用直线对其进行拟合。
f1(x)=a1+b1*x
fit [0:80] f1(x) 'diff-xy-bcmLyo25perS.dat' via a1,b1
f2(x)=a2+b2*x
fit [100:220] f2(x) 'diff-xy-bcmLyo25perS.dat' via a2,b2
我尝试使用命令将这两个图绘制到同一个图中:
f(x) = x < 60 ? f1(x) : f2(x)
plot 'diff-xy-bcmLyo25perS.dat' using 1:2 with lines linestyle 1 title "{/Symbol b}BCMal-C_{12}C_{8}", f(x) lw 3.0 lc rgb 'black'
我得到了上面的情节。
在该图中,可以看到两条线以 80(水平比例)相交,其形状类似于 'v'。
我想消除那个 'v' 形状的交叉点,我想得到两条单独的线,一条从 0 到 80,另一条来自 100 到 220.
我怎么能得到这个?
感谢任何帮助。
提前致谢。
您可以利用 gnuplot 不绘制 infinity
和 NaN
值(如 1.0/0
)
正在使用
plot_if_in_range(y,x,lower,upper) = (x>=lower && x<=upper)?(y):(1.0/0)
您可以轻松绘制给定域中的任何函数:
plot plot_if_in_range(exp(x) , x, -5, 2), \
plot_if_in_range(sin(x)+x, x, -2, 5)
编辑:
抱歉,这与我错过的 Sergei Izmailov 的回答基本相同。
答案:
使用特殊文件 "+"
,它为您的绘图提供 x 值,然后您可以使用您选择的函数对其进行采样,包括在输入超出范围时忽略输入的函数。然后你可以直接使用你的 f1(x)
和 f2(x)
:
plot "+" using ():(0 < && < 80 ? f1() : 1/0), \
"+" using ():(100 < && < 220 ? f2() : 1/0)
使用 gnuplot 5.0,您可以为不同的函数指定不同的范围:
set style data lines
plot 'diff-xy-bcmLyo25perS.dat' using 1:2 ls 1, \
[0:80] f1(x) lw 3.0 lc rgb 'black',\
[100:220] f2(x) lw 3.0 lc rgb 'black'
请注意,这仅适用于您首先绘制数据文件。仅绘图
plot [0:80] f1(x), [100:220] f2(x)
不会工作,因为第一个范围设置等同于全局 set xrange [0:80]
(一直都是),因此第二个函数根本不可见。
但是,对于您的情况,它应该可以正常工作。
我正在尝试绘制图表并使用直线对其进行拟合。
f1(x)=a1+b1*x
fit [0:80] f1(x) 'diff-xy-bcmLyo25perS.dat' via a1,b1
f2(x)=a2+b2*x
fit [100:220] f2(x) 'diff-xy-bcmLyo25perS.dat' via a2,b2
我尝试使用命令将这两个图绘制到同一个图中:
f(x) = x < 60 ? f1(x) : f2(x)
plot 'diff-xy-bcmLyo25perS.dat' using 1:2 with lines linestyle 1 title "{/Symbol b}BCMal-C_{12}C_{8}", f(x) lw 3.0 lc rgb 'black'
我得到了上面的情节。
在该图中,可以看到两条线以 80(水平比例)相交,其形状类似于 'v'。
我想消除那个 'v' 形状的交叉点,我想得到两条单独的线,一条从 0 到 80,另一条来自 100 到 220.
我怎么能得到这个?
感谢任何帮助。
提前致谢。
您可以利用 gnuplot 不绘制 infinity
和 NaN
值(如 1.0/0
)
正在使用
plot_if_in_range(y,x,lower,upper) = (x>=lower && x<=upper)?(y):(1.0/0)
您可以轻松绘制给定域中的任何函数:
plot plot_if_in_range(exp(x) , x, -5, 2), \
plot_if_in_range(sin(x)+x, x, -2, 5)
编辑: 抱歉,这与我错过的 Sergei Izmailov 的回答基本相同。
答案:
使用特殊文件 "+"
,它为您的绘图提供 x 值,然后您可以使用您选择的函数对其进行采样,包括在输入超出范围时忽略输入的函数。然后你可以直接使用你的 f1(x)
和 f2(x)
:
plot "+" using ():(0 < && < 80 ? f1() : 1/0), \
"+" using ():(100 < && < 220 ? f2() : 1/0)
使用 gnuplot 5.0,您可以为不同的函数指定不同的范围:
set style data lines
plot 'diff-xy-bcmLyo25perS.dat' using 1:2 ls 1, \
[0:80] f1(x) lw 3.0 lc rgb 'black',\
[100:220] f2(x) lw 3.0 lc rgb 'black'
请注意,这仅适用于您首先绘制数据文件。仅绘图
plot [0:80] f1(x), [100:220] f2(x)
不会工作,因为第一个范围设置等同于全局 set xrange [0:80]
(一直都是),因此第二个函数根本不可见。
但是,对于您的情况,它应该可以正常工作。