ggplot2中stat_smooth绘制多项式曲线不光滑,如何优化?
解决ggplot2中三次多项式回归曲线不光滑的问题
你遇到的曲线不光滑,核心原因是x变量(Kategorie)只有4个离散值,stat_smooth默认只会在这4个原始x点上进行预测,连接起来自然是折线而非光滑曲线。下面提供两种解决方法:
方法1:手动生成连续预测点绘制光滑曲线
通过拟合模型、生成连续x序列、预测y值的方式,完全控制曲线的光滑度:
# 构造原始数据框 AHorizontKat <- data.frame( Kategorie = c(1,2,3,4), Solidago = c(20.5, 24.6, 29.9, 352.9) ) # 拟合三次多项式回归模型 model <- lm(Solidago ~ poly(Kategorie, 3), data = AHorizontKat) # 生成100个连续的x预测点(覆盖原始x范围) pred_x <- seq(min(AHorizontKat$Kategorie), max(AHorizontKat$Kategorie), length.out = 100) pred_data <- data.frame(Kategorie = pred_x) # 预测对应y值 pred_data$Solidago_pred <- predict(model, newdata = pred_data) # 绘图 ggplot(AHorizontKat, aes(Kategorie, Solidago)) + geom_point() + # 添加光滑预测曲线 geom_line(data = pred_data, aes(y = Solidago_pred), size = 0.1) + xlab("A-Horizont in cm") + ylab("Mittelwert Fläche in m²") + # 保留分类标签,同时按连续数值处理x轴 scale_x_continuous( breaks = c(1,2,3,4), labels = c("1 bis 3", "4 bis 6", "7 bis 9", ">10") )
方法2:修改stat_smooth的预测点数量
如果想继续使用stat_smooth,可以通过n参数指定更多预测点,同时将x轴改为连续型(否则n参数无效):
ggplot(AHorizontKat, aes(Kategorie, Solidago))+ geom_point()+ # 设置n=100增加预测点数量 stat_smooth(method = 'lm', formula = y~poly(x,3), se=FALSE, size = 0.1, n = 100)+ xlab("A-Horizont in cm")+ ylab("Mittelwert Fläche in m²")+ scale_x_continuous( breaks = c(1,2,3,4), labels = c("1 bis 3", "4 bis 6", "7 bis 9", ">10") )
内容的提问来源于stack exchange,提问作者Jens77
相关产品推荐
相关产品推荐

