Как создать линейный график с несколькими строками из нескольких переменных в R

#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, если не в расплавленном фрейме. Когда я пытаюсь создать линейный график, я не знаю, как указать, какая «переменная» будет использоваться. Я хочу, чтобы строками были процентные значения для женщин, мужчин, а меткой были итоговые значения.Должно выглядеть так с годом в легенде, пунктиром 2016 (на этом рисунке 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")
  

введите описание изображения здесь