使用ggplot2绘制自定义方程:以列值为参数添加指数拟合曲线
解决方案:为分面图添加指数拟合曲线
步骤1:生成拟合曲线的预测数据集
每个Assignment对应唯一的拟合参数a和b,我们需要基于这些参数生成连续时间点的拟合值,保证曲线平滑。直接从原始宽数据出发,为每个分组生成覆盖所有时间范围的序列点:
fit_data <- data %>% select(Assignment, a, b) %>% # 按Assignment分组,生成连续时间序列(100个点保证曲线平滑) group_by(Assignment) %>% expand(t = seq(min(data_long$t), max(data_long$t), length.out = 100)) %>% # 合并对应分组的a、b参数 left_join(data %>% select(Assignment, a, b), by = "Assignment") %>% # 根据公式y = ae^(-bx)计算拟合强度 mutate(fit_intensity = a * exp(-b * t))
步骤2:在分面图中添加拟合曲线
修改原有的ggplot代码,通过geom_line引入生成的拟合数据,指定曲线样式区分散点:
library(ggplot2) library(ggforce) plot <- ggplot() + # 绘制原始强度散点 geom_point( data = data_long, aes(x = t, y = intensity) ) + # 绘制指数拟合曲线 geom_line( data = fit_data, aes(x = t, y = fit_intensity), color = "red", linewidth = 1 ) + facet_wrap_paginate(~Assignment, ncol = 2, nrow = 2, scales = "free_y") # 查看第一页分面图 print(plot) # 切换查看第二页 print(plot + facet_wrap_paginate(~Assignment, ncol = 2, nrow = 2, page = 2, scales = "free_y"))
关键说明
- 用
data_long$t的最小/最大值生成时间序列,比硬编码时间值更灵活,适配数据变化; expand()函数为每个Assignment生成独立的连续时间点,确保每个分面都有完整的拟合曲线;- 可根据需求调整曲线的颜色、线宽等样式,提升可视化效果。
内容的提问来源于stack exchange,提问作者LuisC
相关产品推荐
相关产品推荐

