You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 10:06:03