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

使用ggplot2的geom_path/geom_line绘制principal_curve曲线不光滑求助

解决思路
  • 确认曲线数据来源:你可能误将原始数据按ord排序后绘图,而非使用主曲线本身的点。principal_curve生成的crv$s才是主曲线上的拟合点,这些点本身已沿曲线顺序排列,直接提取crv$s转为dataframe即可用于ggplot绘图,无需用原始数据的ord字段排序。

  • 插值补充曲线点:如果crv$s的行数远少于原始数据(比如默认参数下生成的点较少),直接绘图会因点稀疏导致线条不光滑。可以用approx()或spline()函数对crv$s按曲线顺序做插值,生成更多密集点后再绘制:

    # 假设crv$s是2列的坐标数据,按顺序插值生成500个点
    interp_data <- spline(x = 1:nrow(crv$s), y = crv$s, n = 500)
    df_curve <- data.frame(x = interp_data$y[,1], y = interp_data$y[,2])
    ggplot(df_curve, aes(x, y)) + geom_path()
    
  • 检查ggplot分组设置:如果你的df1同时包含原始数据点和曲线点,需为曲线点单独设置分组(比如group=1),避免geom_path/geom_line错误连接不同组的点:

    # 单独提取曲线点绘图更稳妥
    ggplot() + geom_path(data = df_curve, aes(x, y))
    
  • 调整主曲线的光滑度:重新运行principal_curve时,通过smoother参数控制曲线的光滑程度。比如修改smooth.spline的自由度参数,生成更光滑的曲线:

    # df值越大曲线越贴合数据,越小越光滑,按需调整
    crv <- principal_curve(mat1, smoother = function(x, y) smooth.spline(x, y, df = 15))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 20:07:28