R语言ggplot为密度图分位数区域添加填充色的实现问题
ggplot密度图分位数区域填充解决方案
library(ggplot2) # 构造测试数据集 dt <- data.frame(scores = rnorm(200)) dens <- density(dt$scores) df <- data.frame(x = dens$x, y = dens$y) # 计算目标分位数 quantiles <- quantile(dt$scores, prob = c(0.25, 0.5, 0.75)) df$quantile <- factor(findInterval(df$x, quantiles)) levels(df$quantile) <- c("<25%", "25%-50%", "50-75%", "75-100%") # 最终绘图代码 ggplot(df, aes(x, y)) + geom_line() + # 配置填充透明度,alpha取值0-1,数值越小透明度越高 geom_ribbon(aes(ymin = 0, ymax = y, fill = quantile), alpha = 0.6) + # X轴直接使用分位数对应的原始分数作为刻度,无需额外设置百分比标签 scale_x_continuous(breaks = quantiles) + # 自定义4个分位区间的填充色,可自行替换values内的颜色值 scale_fill_manual(values = c("#FFE4B5", "#98FB98", "#87CEFA", "#DDA0DD"))
修改说明
- X轴显示原始分数:原代码
scale_x_continuous(breaks=quantiles)中quantiles本身就是原始分数计算得到的数值,只要不为该函数额外配置百分比格式的labels参数,X轴默认就会展示原始分数刻度。 - 自定义填充色:通过
scale_fill_manual的values参数传入4个颜色值即可,支持十六进制颜色码、R内置颜色名两种格式。 - 调整填充透明度:在
geom_ribbon中新增alpha参数,取值范围为0~1,可根据视觉效果灵活调整。
内容的提问来源于stack exchange,提问作者Oscar Kjell
相关产品推荐
相关产品推荐

