Как наложить линейный график на столбчатый график (Dplyr)? - PullRequest
0 голосов
/ 08 апреля 2019

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

В настоящее время я построил две отдельные гистограммы, но думаю, что они будут лучше смотреться в одной.

Мои данные выглядят так:

ID   Year   Party  Change
1    2010   Labour  NA
1    2011   Labour  No Change
1    2012   Con     Change
1    2013   Con     No Change
2    2010   Con     No Change
2    2011   Con     No Change
2    2012   Con     No Change
2    2013   Con     No Change
... etc.

Это графики, которые я уже построил.

library(dplyr)
library(ggplot2)

df %>%
  group_by(Change) %>%
  filter(Year != 2010) %>%
  ggplot(aes(fill = Change, y = ID, x= Year)) + 
    geom_bar(stat="identity", position = "fill") +
    xlab("Year") +
    ylab("% of Sample") 

https://imgur.com/lhCoXaR


ggplot(df, aes(fill = PolParty, y = pidp, x = wave)) + 
    geom_bar(stat="identity", position = "fill") +
  xlab("Year") +
  ylab("% of Sample") +

https://imgur.com/0qbIL5h

В идеале я хотел бы наложить первый график поверх второго в виде линейного графика. Оси одинаковы, так что я не думаю, что это будет проблемой, но я не знаю, как преобразовать столбчатую диаграмму в линейный график.

1 Ответ

1 голос
/ 09 апреля 2019

С полным набором данных мы получили бы ответ, который бы более точно отражал вопрос;но как быстрое и грязное решение, вы захотите использовать что-то вроде приведенного ниже кода.

Я изменил имена, чтобы немного прояснить, что происходит.Я предполагаю, что df на самом деле имеет все переменные, которые вы упомянули.Вероятно, лучше всего разбить соответствующие переменные на два отдельных фрейма данных, а затем передать их каждому geom_ отдельно.

library(dplyr)
library(ggplot2)

data <- "ID   Year   Party  Changed_seats
1    2010   Labour  NA
1    2011   Labour  No_Change
1    2012   Con     Change
1    2013   Con     No_Change
2    2010   Con     No_Change
2    2011   Con     No_Change
2    2012   Con     No_Change
2    2013   Con     No_Change
3    2014   Con     No_Change
3    2015   Con     Change
3    2016   Con     Change
3    2017   Con     No_Change
4    2014   Con     No_Change
4    2015   Con     Change
4    2016   Con     Change
4    2017   Con     No_Change"

df <- read.table(text = data, header = TRUE) 


seat_changes_df <- df %>%
  select(Year, Changed_seats) %>%
  mutate(Year = as.factor(Year)) %>%
  group_by(Year) %>%
  mutate(Prop_change = sum(Changed_seats == "Change")/n())

ggplot() + 
  geom_line(data = seat_changes_df, aes(x = Year, y = Prop_change), group = 1) +
  scale_y_continuous(labels = scales::percent) +
  xlab("Year") +
  ylab("Seats changed")
#> Warning: Removed 2 rows containing missing values (geom_path).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...