#r #tidyverse
#r #tidyverse
Вопрос:
У меня есть два фрейма данных, и я хочу построить сравнение между ними. График и фреймы данных выглядят следующим образом
df2019 <- data.frame(Institute = c("A","B","C"),Women = c(65,50,70),Men = c(35,50,30))
df2016 <- data.frame(Institute = c("A","B","C"),Women = c(70,45,50),Men = c(30,55,50))
df2019_melted <- melt(df2019)
ggplot(data = df2019_melted, aes(x = Institute, y = value, fill = variable))
geom_bar(stat = "identity", position = "dodge")
labs(fill = "Gender")
xlab("Institute")
ylab("Percent")
scale_fill_discrete(labels = c("Women","Men"))
ggtitle("Overall Gender Composition 2019")
но я хочу, чтобы график показывал 2016 год в выцветших столбцах, но сгруппированный так же, как 2019 год, то есть по 4 столбца для каждого института.
Поскольку имена столбцов одинаковы для всех моих фреймов данных, я не могу использовать rbind () или аналогичный, поскольку он не различает, какой фрейм данных является тем, что при объединении.
Ответ №1:
Добавьте столбец для year в свои фреймы данных, а затем объедините и расплавьте. ggplot предпочитает, чтобы все было в одном data.frame
all_melted <- reshape2::melt(
rbind(cbind(df2019, year=2019), cbind(df2016, year=2016)),
id=c("year", "Institute"))
Затем вы можете построить график с помощью чего-то вроде этого, сопоставив год с альфой, чтобы создать «выцветшие» столбцы
ggplot(all_melted, aes(x = Institute, y = value, fill = variable, alpha=factor(year)))
geom_col(position = "dodge")
labs(fill = "Gender")
xlab("Institute")
ylab("Percent")
scale_alpha_discrete(range=c(.4, 1), name="Year")
ggtitle("Overall Gender Composition")