使用ggplot2绘制直方图时报Aesthetics长度不匹配错误如何解决
问题排查与修复方案
报错原因
aes()映射规则要求传入的变量必须是ggplot()指定数据集内的列,你在代码中写aes(final)时,ggplot会先在finaldata数据框中查找名为final的列,查找失败后就会调用全局环境中定义的final数组。该数组总长度为30,和finaldata的行数6不匹配,直接触发长度不匹配报错。- 你构造的
finaldata是宽格式数据框,共5列6行,如果要绘制所有数值的分布直方图,需要先将宽格式转换为长格式,把所有数值合并到同一列后再进行映射。
修复方案
方案1:直接基于数值向量绘图(适合仅需绘制全量数值分布的场景)
不需要构造宽格式数据框,直接把所有数值合并为向量后构造数据集即可:
library(ggplot2) # 合并所有数值为向量 array1 = c(24,33,25,34,24,12) array2 = c(13,13,10,29,38,12,20,22,20,39,26,15,31,29,1,15,22,19,20,13,29,32,4,27) all_value <- c(array1, array2) finaldata <- data.frame(value = all_value) # 绘制直方图 ggplot(finaldata, aes(x = value)) + geom_histogram(bins = 30, fill = "steelblue", color = "white")
方案2:宽表转长表绘图(适合需要保留原始数组分组逻辑的场景)
如果需要保留6行5列的数组结构用于后续分组分析,可以先将宽格式数据框转为长格式:
library(ggplot2) library(tidyr) # 构造原始数组 array1 = c(24,33,25,34,24,12) array2 = c(13,13,10,29,38,12,20,22,20,39,26,15,31,29,1,15,22,19,20,13,29,32,4,27) final = array(c(array1, array2), dim=c(6,5)) # 宽表转长表 finaldata <- data.frame(final) finaldata_long <- pivot_longer(finaldata, cols = everything(), names_to = "group", values_to = "value") # 绘制直方图,如需按分组区分可添加fill = group参数到aes中 ggplot(finaldata_long, aes(x = value)) + geom_histogram(bins = 30, fill = "steelblue", color = "white")
内容的提问来源于stack exchange,提问作者user16855894
相关产品推荐
相关产品推荐

