Packages we will need:
library(tidyverse) library(forcats) library(ggparliament)
Check out part 1 of this blog where you can follow along how to scrape the data that we will use in this blog. It will create a dataset of the current MPs in the Irish Dail.
In this blog, we will use the ggparliament package, created by Zoe Meers.
With this dataset of the 33rd Dail, we will reduce it down to get the number of seats that each party holds.
If we don’t want to graph every party, we can lump most of the smaller parties into an “other” category. We can do this with the
fct_lump_n() function from the
forcats package. I want the top five biggest parties only in the graph. The rest will be colored as “Other”.
Click here to read more about the
forcats pacakge and dealing with factors in R.
dail_33 %>% mutate(party_groups = fct_lump_n(party, n = 5, other_level = "Other"))-> dail_lump_count
Next we want to count the number of members per party.
dail_lump_count %>% group_by(party_groups) %>% count() %>% arrange(desc(n)) -> dail_count
<fct> <int> 1 Fianna Fail 38 2 Sinn Fein 37 3 Fine Gael 35 4 Independent 19 5 Other 19 6 Green Party 12
Before we graph, I found the hex colors that represent each of the biggest Irish political party. We can create a new party color variables with the
case_when() function and add each color.
dail_count %<>% mutate(party_color = case_when(party_groups == "Fianna Fail" ~ "#66bb66", party_groups == "Fine Gael" ~ "#6699ff", party_groups == "Green Party" ~ "#44532a", party_groups == "Independent" ~ "#8e2420", party_groups == "Sinn Fein" ~ "#326760", party_groups == "Other" ~ "#ee9f27"))
Now we can dive into the
We use the
parliamenet_data() function to create coordinates for our graph: these are the
y variables we will plot out.
We feed in the data.frame of all the seat counts into the
We specifiy the type as “
semi-circle“. Other options are “
horseshoe” and “
We can change how many circles we want stacked on top of each other.
I tried it with three and it looked quite strange. So play around with this
parl_rows argument to see what suits your data best
And last we feed in the number of seats that each party has with the
n we summarised above.
dail_33_coord <- parliament_data(election_data = dail_count, type = "semicircle", parl_rows = 6, party_seats = dail_count$n)
If we view the
dail_33_coord data.frame we can see that the
parliament_data() function calculated new
y coordinate variables for the semi-circle graph.
I don’t know what the theta variables is for… But there it is also … maybe to make circular shapes?
We feed the x and y coordinates into the
ggplot() function and then add the
geom_parliament_seat() layer to produce our graph!
Click here to check out the PDF for the ggparliament package
dail_33_coord %>% ggplot(aes(x = x, y = y, colour = party_groups)) + geom_parliament_seats(size = 20) -> dail_33_plot
And we can make it look more pretty with
bbc_style() plot and colors.
Click here to read more about the BBC style graphs.
dail_33_plot + bbplot::bbc_style() + ggtitle("33rd Irish Parliament") + theme(text = element_text(size = 50), legend.title = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank()) + scale_colour_manual(values = dail_33_coord$party_color, limits = dail_33_coord$party_groups)