【问题标题】:Using 'filledcurves' with fitted data使用带有拟合数据的“填充曲线”
【发布时间】:2021-09-28 18:38:24
【问题描述】:

我正在使用“fit”拟合一些数据,得到 f(x) 并绘制它就好了。但是,除了数据点和拟合曲线之外,我还想在图中添加一个置信区间,所以我需要在 f(x)-stddev_y 和 f(x)+stddev_y 之间添加一个“条纹”。

我可以将边框 f(x)-stddev_y 和 f(x)+stddev_y 写入表中,像这样

set datafile separator ';'
f(x) = a*x + b
fit f(x) '0706-2007.csv' using 7:8 via a,b
stddev_y = sqrt(FIT_WSSR / (FIT_NDF + 1 ))
set table "1.dat"
plot [10:80] f(x)-sqrt(FIT_WSSR / (FIT_NDF + 1 ))
set table "2.dat"
plot [10:80] f(x)+sqrt(FIT_WSSR / (FIT_NDF + 1 ))
unset table
plot [10:80] '0706-2007.csv' using 7:8 not with points pt 7 ps 1,f(x) not with lines,\
"< paste 1.dat 2.dat | awk '{print $1\";\"$2\";\"$5;}' " using 1:2:3 with filledcurves title sprintf("σ = %.1f",sqrt(FIT_WSSR/(FIT_NDF+1)))

但它看起来有些复杂。有没有更直接的方法?

【问题讨论】:

    标签: gnuplot


    【解决方案1】:

    如果我对您的理解正确,您想填充拟合不确定性所覆盖的区域。在线性拟合的简单情况下,这确实可以通过恒定的移位因子轻松完成。可以使用特殊的文件名'+'(详见special-filename手册)。

    set datafile separator ';'
    f(x) = a*x + b
    fit f(x) '0706-2007.csv' using 7:8 via a,b
    stddev_y = sqrt(FIT_WSSR / (FIT_NDF + 1 ))
    plot '+' using ($1):(f($1)-stddev_y):(f($1)+stddev_y) with filledcurves
    

    如果您碰巧有一个更复杂的拟合函数,则需要更仔细地考虑最小值和最大值的表达式。为此,set fit errorvariables 可能有用,这会将a, b 的拟合误差保存为a_err, b_err

    【讨论】:

    • 好的。即使在这种线性拟合的情况下,我也确实使用了 a, b 和 a_err, b_err。
    • 当然,这当然也可以。如果我的回答对您有帮助,我可以请您在接受的答案上签名吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2019-03-15
    相关资源
    最近更新 更多