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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:40:06