We will use the
geom_segment layer from
ggplot2 to make a timeline graph!
This layer takes both
y as well as
yend inputs for the start and end of the segment lines in the plot.
For our timeline, the
x will be the start of each Irish Taoiseach’s term. The
xend will be the end of their term, when they get kicked out of office.
Taoisigh (plural of Taoiseach) are Irish prime ministers and are in charge of the executive branch when their party is in change. For Ireland, that means that basically they are the leader of one of the two main parties – Fianna Fail and Fine Gael.
Not very exciting.
Also they are all men.
This is also not very exciting. We have a bit more to go with increasing the diversity in Ireland’s top job.
y argument is the Taoiseach
number in office. Although there have been fifteen men that have held the office of Taoiseach, this does not mean that they only held office for one time only. Ireland has a parliamentary system so when a party loses an election, the former Taoiseach can become the leader of the opposition and hope in the future they can become Taoiseach again. Some men have been Taoiseach two or three times in non-consecutive terms.
When we are adding the labels with the
geom_text() layer, I created an
order variable which indicates the first time each man took the office of Taoiseach. This is so I only have the name of each man only once in the graph. If we don’t do this step, if a man held office more than once, their name appears every time on the graph and the plot becomes a crowded mess.
I add the
ifelse statement so that the first name appears after the segment line and therefore text does not take up too much room on the left edge of the graph.
Last we use the
scale_color_manual() function with nice hex colors for each of the political parties.
time_line <- df %>% ggplot(aes(x = as.Date(start), y = number, color = party_factor)) + geom_segment(aes(xend = as.Date(end), yend = number, color = party_factor), size = 6) + geom_text(aes(label = order, hjust = ifelse(taoiseach_number < 2, -0.7, 1.1)), size = 8, show.legend = FALSE) + scale_color_manual(values = c("Fine Gael" = "#004266", "Fianna Fáil" = "#FCB322", "Cumann na nGaedheal" = "#D62828"))
I increase the limits of the graph to accommodate the name labels. Most of the time, these extra bits of code in
ggplot2 depend on the type of data you have and what fits on the graph plane nicely!
So this stages is often only finished after trial-and-error.
I add a snazzy
theme_fivethirtyeight() theme from
Last, with the
theme() function, we can remove most of the elements of the graph to make the graph cleaner.
time_line <- time_line + expand_limits(x = as.Date("1915-01-01")) + theme_fivethirtyeight() + theme(legend.position = "top", legend.title = element_blank(), legend.direction = "vertical", axis.title.y = element_blank(), axis.text.y = element_blank(), text = element_text(size = 20)) + labs(title = "Taoiseach Terms in Ireland", subtitle = "From 1922 to 2021")
We can also create the pie chart to see which party has held power longest in Ireland.
dplyr we can subtract the start date from the end date and add all the Taoiseach durations (in days) together with the
We then choose the highest duration value for each party with the
I was lazy and I just re-wrote the values in a new
data.frame and called it
df %>% group_by(party_factor) %>% dplyr::summarise(max_count = cumsum(duration_number)) %>% slice(which.max(max_count)) %>% select(party_factor, max_count) %>% arrange(desc(max_count)) counts <- data.frame(group = c("Cumann na nGaedheal", "Fine Gael" ,"Fianna Fáil"), value = c(3381, 10143, 22539))
Create proportion values for our pie-chart graph. To do this divide
value by the
sum of the values and multiply by 100.
data <- counts %>% arrange(desc(group)) %>% dplyr::mutate(prop = value / sum(value) * 100)
Change the numeric variables to factors.
data$duration <- as.factor(data$value) data$party_factor <- as.factor(data$group)
We use the
coord_polar() to create the piechart. To learn more, check out the r-graph-gallery page about creating pie-charts:
pie_chart <- ggplot(data, aes(x = ", y = prop, fill = group)) + geom_bar(stat = "identity", width = 1, color = "white") + coord_polar("y", start = 0) + theme(legend.position = "none") + scale_fill_manual(values = c("Fine Gael" = "#004266", "Fianna Fáil" = "#FCB322", "Cumann na nGaedheal" = "#D62828")) + labs(title = "Which party held the office of Taoiseach longest?", subtitle = "From 1922 to 2021")
We can tidy up the plot and get rid of theme elements we don’t want with
pie_chart <- pie_chart + theme_void() + theme(legend.title = element_blank(), legend.position = none, text = element_text(size = 40))
I want to add both graphs together so I can save the pie chart with a transparent background with the
ggsave() function. I also make sure the lines are not jagged with the
type = "cairo" from with
ggsave(pie_chart, file="pie_chart.png", type="cairo", bg = "transparent", width = 50, height = 50, units = "cm")
And we can use canva.com to add them together and create a single chart