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

ggplot使用geom_function()拟合散点曲线及手绘图形对应函数生成工具问询

R ggplot2 实现散点到x轴的弧形连线方案

核心实现代码

library(tidyverse)

# 原始数据
df_f <- tibble(
    seq_n = seq(1, 11, 1),
    top_white_values = c(1970, 1985, 1963, 1949, 1943, 1941, 1930, 1942, 1985, 1955, 1971)
)

# 定义曲线偏移量,控制弧度大小,数值越大弧度越宽
offset <- 0.3

ggplot(data = df_f) + 
    # 批量生成每个点对应的弧形连线
    lapply(1:nrow(df_f), function(i) {
        x0 <- df_f$seq_n[i]
        y0 <- df_f$top_white_values[i]
        # 构造二次函数,顶点在(x0, y0),与x轴交于x0±offset
        geom_function(
            fun = function(x) y0 - (y0 / (offset^2)) * (x - x0)^2,
            xlim = c(x0 - offset, x0 + offset),
            color = "gray"
        )
    }) +
    geom_point(aes(x = seq_n, y = top_white_values), size = 2) +
    geom_text(aes(x = seq_n, y = top_white_values, label = top_white_values), vjust = -0.5)

效果调整说明

  • 把函数中的幂次^2替换为^(1/2)、^4等其他数值,即可修改曲线的弧度形态,比如替换为fun = function(x) y0 * sqrt(1 - ((x - x0)/offset)^2)就可以得到上半圆形态的弧形连线
  • 调整offset参数可以控制弧线的宽度,数值越小弧线越贴近垂直方向

手绘图形匹配数学函数工具说明
  • 交互可视化工具:Desmos、Mathematica均自带手绘拟合功能,你可以直接在画布上绘制曲线形状,工具会自动返回匹配度最高的常见数学函数(幂函数、指数函数、多项式、三角函数等)表达式,支持手动调整参数优化拟合效果
  • 编程实现方案:你可以先将手绘曲线采样为离散坐标点,再用R的nls函数、Python的scipy.optimize.curve_fit工具自定义拟合函数族,得到最匹配的函数参数

内容的提问来源于stack exchange,提问作者Laura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:36:02