如何将R脊线图转为垂直脊线图?解决width与stat参数报错
解决geom_vridgeline绘制垂直脊线图的报错问题
报错原因
你设置了stat="identity",这个参数会让ggplot直接使用原始数据,不执行任何统计计算,因此..density..这个统计变量根本不存在,这就是报错的核心原因。而且你的数据框里已经通过density()函数计算出了密度值,存在pdf列中,完全不需要调用统计生成的..density..。
修正后的代码
# 修正后的垂直脊线图代码 p <- ggplot(df, aes(x = id, y = x, width = pdf, group = interaction(name, id), fill = name)) + geom_vridgeline(stat = "identity", trim = FALSE, alpha = 0.85, scale = 2) + scale_x_continuous(limits = c(-1, 3)) + # 适配分组的x轴范围 scale_y_continuous(limits = c(-6, 6)) p
关键调整点
- 把
width = ..density..替换为width = pdf,直接使用数据中已有的密度值 - 添加
group = interaction(name, id),确保每个name和id的组合都能生成独立的垂直脊线 - 调整
fill映射为name,和你原来的标准脊线图保持一致(如果需要按id填充可自行修改) - 调整x轴范围,让脊线显示更合理
内容的提问来源于stack exchange,提问作者a11
相关产品推荐
相关产品推荐

