#r #ggplot2
#r #ggplot2
Вопрос:
У меня есть два фрейма данных, и я хочу построить сравнение между ними. График и фреймы данных выглядят так
df2019 <- data.frame(Role = c("A","B","C"),Women_percent = c(65,50,70),Men_percent = c(35,50,30), Women_total =
c(130,100,140), Men_total = c(70,100,60))
df2016 <- data.frame(Role= c("A","B","C"),Women_percent = c(70,45,50),Men_percent = c(30,55,50),Women_total =
c(140,90,100), Men_total = c(60,110,100))
all_melted <- reshape2::melt(
rbind(cbind(df2019, year=2019), cbind(df2016, year=2016)),
id=c("year", "Role"))
Нет причин, по которым мне нужны данные в расплавленном виде, я просто сделал это, потому что я строил гистограммы с его помощью, но теперь мне нужен линейный график, и я не знаю, как создавать линейные графики в расплавленном виде, и не знаю, как сохранить этот тег 19/16, если не в расплавленном фрейме. Когда я пытаюсь создать линейный график, я не знаю, как указать, какая «переменная» будет использоваться. Я хочу, чтобы строками были процентные значения для женщин, мужчин, а меткой были итоговые значения. (на этом рисунке geom_text — это процентные значения, я хочу, чтобы он использовал общие значения)
Важно, чтобы тип линии был пунктирным в 2016 году и чтобы легенда показывала, что
Комментарии:
1. для чего предназначена пунктирная линия `?
2. @Stephan просто чтобы отличить 2019 и 2016 годы, поэтому в основном я спрашиваю, как создать тот же график с типами линий в легенде. Из того, что я собрал, это на самом деле невозможно, если вы не объедините фреймы данных, как я сделал в примере, который я показал. У меня помечена только строка 2019, потому что она более важна
Ответ №1:
Я думаю, что было бы проще rbind
разделить два фрейма, пометив их годом, а затем изменить результат так, чтобы у вас были столбцы для роли, года, пола, процента и итога.
Затем я бы использовал немного хитрости в альфа-масштабе, чтобы скрыть точки и метки с 2016 года:
df2016$year <- 2016
df2019$year <- 2019
rbind(df2016, df2019) %>%
pivot_longer(cols = 2:5, names_sep = "_", names_to = c("Gender", "Type")) %>%
pivot_wider(names_from = Type) %>%
ggplot(aes(Role, percent, color = Gender,
linetype = factor(year),
group = paste(Gender, year)))
geom_line(size = 1.3)
geom_point(size = 10, aes(alpha = year))
geom_text(aes(label = total, alpha = year), colour = "black")
scale_colour_manual(values = c("#07aaf6", "#ef786f"))
scale_alpha(range = c(0, 1), guide = guide_none())
scale_linetype_manual(values = c(2, 1))
labs(y = "Percent", color = "Gender", linetype = "Year")