График наложенной плотности, ggplot2, R 3.5.1., ошибка: эстетика должна быть длиной 1 или такой же, как данные

Я пытаюсь создать один график с двумя наложенными графиками сглаженной плотности для моего numeric_var, стратифицированного для моего factor_var, используя Rstudio R версии 3.5.1 для Mac. Я всегда получаю одну и ту же ошибку:

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

Я пробовал несколько подходов (один пример ниже). Я также следовал этому руководству - STHDA, удалил NA и проверил другие вопросы относительно этой ошибки, но мне не удается заставить это работать. Вот что я пытаюсь получить:

образ

Помогите, пожалуйста? (Я новичок, первый вопрос, пожалуйста, будьте добры:))

данные

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 ответа

Вы также сказали 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

Я решил проблему, взглянув на структуру и осознав, что приведенный выше код не будет возвращать факторную переменную (не уверен почему?), Поэтому изменил ее на следующий.

Спасибо всем, кто ответил! Теперь я наконец могу пообедать

Пример данных

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)

Другие вопросы по тегам