ggplot调用geom_density绘制密度图提示缺失x美学映射报错如何解决
问题修复方案
核心错误原因
- 变量名大小写不匹配:你读取数据后赋值给
profiles,但后续转换数据框时误用了首字母大写的Profiles,属于基础拼写错误。 - 密度图映射逻辑错误:
geom_density仅需要输入待计算分布的一维数值作为x映射,你错误将波段分类字段name赋值给x、将数值value赋值给y,完全不符合密度图的映射要求,直接触发报错。 - 垂直线映射参数错误:
geom_vline的位置映射参数是xintercept而非x,原代码的参数写法触发了未知美学参数的警告。 - 填充映射缺失:代码中调用了
scale_fill_manual但未在美学映射中声明fill参数,填充色不会生效。
修复后可运行代码
library(tidyverse) # read.csv默认输出就是数据框,无需额外转换 profiles = read.csv("~/profiles.csv") profiles %>% pivot_longer(cols = -Class) %>% ggplot(aes(x = value, color = Class, fill = Class)) + geom_density(alpha = 0.3) + # 按类别+波段分组计算均值,适配分面场景 geom_vline(data = . %>% group_by(Class, name) %>% summarise(grp.mean = mean(value)), aes(xintercept = grp.mean, color = Class), linetype="dashed", size=1) + # 不需要按波段分面的话可以删除下一行,所有波段数值会合并按类别绘制密度 facet_wrap(~name, scales = "free_x") + scale_fill_manual(values=c('cyan', 'burlywood', 'darkgreen', 'blue'), name = "类别") + scale_color_manual(values=c("gray", "#CD853F", "#3CB371", "#33CEFF"), name = "类别") + theme(panel.background = element_blank(), panel.grid.major = element_line(color = "gray", size = 0.5), panel.grid.minor = element_line(color = "gray", size = 0.5), axis.ticks = element_blank()) + labs(x = "数值", y = "密度", title = "光谱剖面密度分布图", subtitle = "虚线代表各组均值")
内容的提问来源于stack exchange,提问作者Ed_Gravy
相关产品推荐
相关产品推荐

