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

如何在ggplot散点图中添加带置信区间的幂函数拟合曲线

可行实现方案

你可以通过以下两种方法替换原有geom_smooth的loess拟合,实现带置信区间的幂函数回归:


方案1:对数转换线性拟合(实现最简单)

对幂函数y=a*x^b两边取自然对数可得ln(y) = ln(a) + b*ln(x),本质为线性回归,geom_smooth可直接支持,置信区间自动计算:

p2<-ggplot(Data,aes(x=Diameter,y=Wet_weight,colour=Site))+
  geom_point(size=3.5,alpha=0.3)+
  # 替换原有loess拟合行
  geom_smooth(aes(group=Species),
              method = "glm",
              formula = y ~ log(x),
              family = gaussian(link = "log"),
              colour = "black",
              se = TRUE)+
  labs(x="\nUmbrella diamter (mm)",y="Wet weight (mg)\n")+theme_classic()+
  scale_colour_manual(values=c("black","dark blue","blue","dark green","green"))+
  theme(axis.title.x=element_text(size=20),
        axis.text.x=element_text(size=18,colour="black"),
        axis.title.y=element_text(size=20),
        axis.text.y=element_text(size=18,colour="black"),
        axis.ticks=element_line(colour="black",size=1),
        axis.line=element_line(colour="black",size=1,linetype="solid"),
        legend.position=c(0.18,0.75),
        legend.text=element_text(colour="black",size=17),
        legend.title=element_text(colour="black",size=18))
p2

注意:如果你的数据中直径或湿重存在0值,对数转换会报错,推荐使用方案2


方案2:非线性最小二乘(nls)直接拟合幂函数

直接基于原始模型y=a*x^b做非线性拟合,无需对数转换,更贴合你的模型假设:

# 仅需替换原有代码中的geom_smooth部分即可
geom_smooth(aes(group=Species),
            method = "nls",
            formula = y ~ a * x^b,
            method.args = list(start = c(a = 1, b = 2)), # a和b的初始值可根据你的数据实际范围调整
            se = TRUE,
            colour = "black")

参数说明:start为拟合的初始参数值,若拟合报错可调整a、b的初始值,比如先手动估算下你的数据中x=1时y的大概值作为a的初始值


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:36:04