叠加密度图,ggplot2,R 3.5.1。错误:美学属性必须是长度为1或与数据相同。

3
我正在尝试使用Rstudio R版本3.5.1在Mac上创建一个单一图表,其中包含我的numeric_var的2个重叠的平滑密度图,分层于我的factor_var。我总是得到相同的错误提示:
"Aesthetics must be either length 1 or the same as the data (): x, fill" 

我尝试了多种方法(以下是其中一个示例)。我还遵循了 指南 - STHDA,删除了NA并检查了其他与此错误相关的问题,但我无法使其工作。这就是我想要的:

image

我是一名有用的助手,可以为您进行翻译。以下是内容:

请帮忙吗?(我是新手,第一个问题,请友善 :))

数据

mydata <- fulldata %>%
    select(numeric_var,factor_var) %>%
    filter(factor_var== 0 | factor_var== 1) 
head(mydata)

   numeric_var factor_var
1          0.6          0
2          0.7          0
3          0.7          1
4          0.9          0
5          0.6          1
6          0.7          0

绘图代码

ggplot(mydata, aes(x = numeric_var, fill = factor_var)) +
    geom_density(alpha = 0.5)

错误:

Aesthetics must be either length 1 or the same as the data (598): x, fill

2
请使用dput()分享您数据的样本(不要用strhead或图片/截图),以便其他人可以提供帮助。更多信息请查看这里:https://dev59.com/eG025IYBdhLWcg3whGSx?rq=1 - Tung
2个回答

2

你还需要告诉ggplot你想让你的数据按变量分开,你可以使用group参数轻松实现:

x<-c(0.6,0.7,0.7,0.9,0.6,0.7)
y<-c(0,0,1,0,1,0)

df <- as.data.frame(cbind(x,y))
ggplot(df, aes(x=x,fill=y, group = y))+
  geom_density(alpha=0.5)

输出结果如下第一张图

现在图例已经不同了,这是因为ggplot意识到有一个变量而不是字符。实际上它只需要因子化,但在您的示例中它没有得到。解决方法如下(我确信还有更优雅的解决方案):

x<-c(0.6,0.7,0.7,0.9,0.6,0.7)
y<-as.character(c(0,0,1,0,1,0))

df <- as.data.frame(cbind(x,y))
ggplot(df, aes(x=x, fill=y, group=y))+
  geom_density(alpha=0.5)

这应该会生成所需的图表

graph2


1
谢谢!我认为还有另一个问题,因为我已经用以下方法解决了这个问题,而不是使用group:mydata <- data.frame(num_var = c(0.6, 0.7, 0.7, 0.9, 0.6, 0.7, 0.6, 0.7, 1.1, 0.75), int_var = c(0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L)) head(mydata) mydata[,'fact_var']<-factor(mydata[,'int_var']) ggplot(mydata, aes(x = num_var, fill = fact_var)) + geom_density(alpha = 0.5) - Mia

0

我通过查看结构并意识到上面的代码不会返回一个因子变量(不确定为什么?)所以将其更改为下面的代码,解决了这个问题。

感谢所有回复的人!现在我终于可以吃午饭了。

样本数据

mydata <- data.frame(num_var = c(0.6, 0.7, 0.7, 0.9, 0.6, 0.7, 0.6, 0.7, 1.1, 0.75),
int_var = c(0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L))

代码

head(mydata)
mydata[,'fact_var']<-factor(mydata[,'int_var'])
ggplot(mydata, aes(x = num_var, fill = fact_var)) + geom_density(alpha = 0.5)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接