如何在ggplot中按观测日期分组取分位数后直接拟合回归曲线
解决方案
核心思路是利用geom_smooth()的data参数直接在图层内部完成分组、分位数计算与过滤操作,不需要提前生成任何中间数据集,也不会修改原数据。
你需要先加载dplyr包完成分组过滤操作,修改后的完整绘图代码如下:
library(ggplot2) library(dplyr) ggplot(data=df_Bandvals, aes(x=depth, y=Band12plusmin))+ scale_x_continuous(limits = c(-15, 35))+ scale_y_continuous(limits = c(120, 960))+ geom_point(aes(color=factor(obsdate)), size=1.5)+ geom_smooth( method = "loess", # 图层内部完成分组过滤,仅用每组下50%分位数的样本拟合 data = ~ .x |> group_by(obsdate) |> filter(Band12plusmin <= quantile(Band12plusmin, 0.5)) )
参数说明
~ .x指代ggplot全局传入的原数据集df_Bandvals- 若要调整筛选的分位数阈值,直接修改
quantile()中的0.5为对应数值即可,比如0.3就是取每个分组内下30%分位数的样本 - 若需要换成线性拟合,直接把
method参数改为"lm"即可
内容的提问来源于stack exchange,提问作者jaysigg
相关产品推荐
相关产品推荐

