You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gnuplot线性拟合使用第三变量限定拟合范围及相关问题咨询

gnuplot 拟合相关问题解答

问题1:使用第三变量作为拟合范围判定依据

可以实现,提供两种常用方案:

  • 方案1:使用every关键字按数据行索引筛选,gnuplot中数据行索引从0开始(跳过文件内的注释行后计数),若要拟合前5条数据,写法如下:
# 行号1-5对应索引0-4
fit f(x) FILE u 2:3 every ::0::4 via a,b
  • 方案2:使用三元运算符按列值筛选,适合任意第三列的条件判断,更灵活,不会受注释行计数影响:
# 判断第一列行号值在1到5范围内的点才参与拟合
fit f(x) FILE u 2:(column(1)>=1 && column(1)<=5 ? $3 : NaN) via a,b

问题2:拟合区间内绘制残余图消除警告

警告Ignoring sample range in non-sampled data出现的原因是:plot [xmin:xmax]的区间限制仅作用于函数采样,对外部数据文件无效,gnuplot会忽略该区间设置。
解决方案是绘制残余时用三元运算符过滤符合条件的点,和拟合时的筛选逻辑保持一致即可:

# 按x值区间[0.25:0.58]筛选残余点
plot FILE u 2:($2>=0.25 && $2<=0.58 ? $3 - f($2) : NaN) w p title "Residuals"
# 若按第一列行号1-5筛选,写法如下
# plot FILE u 2:(column(1)>=1 && column(1)<=5 ? $3 - f($2) : NaN) w p title "Residuals"

超出条件的点会返回NaN不会被绘制,即可避免全量数据显示,同时消除警告。

问题3:简便展示拟合参数的方法

无需手动写死label内容,直接使用内置的sprintf格式化函数动态拼接参数即可:

  • 方案1:直接放到图例中,最简便,参数更新后自动同步:
# 可拼接拟合参数的不确定度,fit执行后会自动生成a_err、b_err变量存储参数误差
plot f(x) w l title sprintf("拟合曲线:y = (%.3f ± %.3f)x + (%.1f ± %.1f)", a, a_err, b, b_err), \
     FILE u 2:3 w p title "原始数据"
  • 方案2:如果需要放到图的指定位置,搭配set label使用,比手动输入数值更高效:
set label 1 sprintf("a = %.3f±%.3f\nb = %.1f±%.1f", a, a_err, b, b_err) at graph 0.6, 0.2

内容的提问来源于stack exchange,提问作者Agung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:18:02