使用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
相关产品推荐
相关产品推荐

