使用ggplot2绘制密度曲线不光滑问题求助
问题原因
你的密度曲线不光滑且调整adjust无效,核心原因如下:
coord_cartesian(xlim = ...)仅做可视化层面的裁剪,ggplot仍会基于全部数据计算密度曲线,但默认仅用1024个采样点绘制曲线。若你的数据整体x范围远大于[-50000, 50000],这1024个点会均匀分布在整个数据区间,导致目标范围内采样点数量极少,曲线自然呈现锯齿状。adjust参数仅调整核密度估计的带宽(控制密度曲线的平滑程度),不改变采样点的数量和分布,因此无法解决采样点不足导致的视觉不光滑问题。
解决方案
有两种可行的解决方式:
1. 先过滤数据再绘图
直接筛选出x在[-50000, 50000]范围内的观测,再基于过滤后的数据计算密度。这样采样点会密集分布在目标区间,曲线自然光滑:
data_filtered <- subset(data, x >= -50000 & x <= 50000) ggplot(data_filtered, aes(x = x)) + geom_density(adjust = 1, fill = "grey") + labs(x = "", y = "") + theme_bw()
2. 增加采样点数量
若需要基于全部数据计算密度(保留整体分布对局部的影响),可通过geom_density()的n参数手动增加采样点数量,让目标区间内的点足够密集:
ggplot(data, aes(x = x)) + geom_density(adjust = 1, fill = "grey", n = 10000) # 大幅提升采样点数量 + coord_cartesian(xlim = c(-50000,50000)) + labs(x = "", y = "") + theme_bw()
内容的提问来源于stack exchange,提问作者mas2
相关产品推荐
相关产品推荐

