График наложенной плотности, 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)
что должно привести к желаемому графику
Я решил проблему, взглянув на структуру и осознав, что приведенный выше код не будет возвращать факторную переменную (не уверен почему?), Поэтому изменил ее на следующий.
Спасибо всем, кто ответил! Теперь я наконец могу пообедать
Пример данных
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)