ggplot2中调用drm绘制四参数拟合曲线不光滑如何解决
四参数拟合曲线不光滑问题排查与修复
问题根因
拟合线条出现折角、不光滑是geom_smooth默认计算逻辑导致的:
- 未手动指定预测点数量时,
geom_smooth默认仅提取原始数据集中存在的x轴(浓度)值计算拟合值,再用直线段逐点连接 - 代码中对x轴做了
log2对数转换,原始浓度点在对数尺度下间距不均匀,长线段连接就会呈现明显折角,视觉上不光滑
修复方案
在geom_smooth中添加n参数,手动指定拟合线生成的预测点总数,让预测点足够密集,连线后自然形成光滑曲线。通常设置n=200即可满足出版级的光滑度需求,该参数仅调整线上点的密度,不会改变四参数拟合的结果本身。
修改后的核心绘图代码
仅需替换原有geom_smooth行即可,其余代码无需改动:
# 其余代码保持不变,仅修改geom_smooth部分 ggplot(data = df, aes(Concentrations, Growth, col = Strains, shape = Strains)) + # 新增n=200参数,生成密集预测点实现光滑曲线 geom_smooth(method = drm, method.args = list(fct = L.4()), se = F, size = 1, n = 200) + geom_point(size = 4, alpha = 0.8)+ theme_classic() + coord_trans(x="log2") + scale_color_manual(name = "Strains", values=c("#000000", "#099963", "#804003")) + scale_shape_manual(name = "Strains", values = c(17, 15, 19))+ theme(text = element_text(size = 16), axis.text = element_text(size = 16), axis.line =element_line(size=1), legend.position = c(0.8, 0.6)) + scale_x_continuous(labels = lab_x, breaks = brk_x) + xlab("Concentration (µg/ml)") + ylab("Growth (%)")
额外注意事项
当前x轴标签第一个值设为0,但对应断点配置的是0.1,需要注意0在log2转换下无数学意义,建议确认最低浓度的实际取值,避免运行时弹出缺失值警告。
内容的提问来源于stack exchange,提问作者Trinh Phan-Canh
相关产品推荐
相关产品推荐

