I am creating a stacked bar chart using the following code:
df <- structure(list(stage = structure(c(2L, 3L, 2L,
2L, 2L, 3L, 1L, 3L, 1L, 3L, 2L, 2L, 1L, 2L, 2L, 3L, 2L, 3L, 2L,
2L, 3L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L), levels = c("1",
"2", "3"), class = c("ordered", "factor")), group = structure(c(2L,
1L, 1L, 1L, 2L, 1L, 1L, 3L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 3L, 2L,
1L, 1L, 1L, 1L, 3L, 2L, 2L, 1L, 3L, 2L, 3L, 1L, 3L, 3L), levels = c("1",
"2", "3"), class = c("ordered", "factor"))), row.names = 10:40, class = "data.frame")
bp <- ggplot(data=df , aes(fill = stage, x=forcats::fct_rev(group))) +
geom_bar(position = "fill", width = 0.7, color = "black", size = 0.2) +
coord_flip()
I would like to label the top column with the different levels for "stage" ie. "stage 3", "stage 2", "stage 1", something similar to this:
Any suggestions how to accomplish this?
The simplest way to do this is probably with a secondary y axis
ggplot(data=df , aes(fill = stage, x=forcats::fct_rev(group))) +
geom_bar(position = "fill", width = 0.7, color = "black", size = 0.2) +
coord_flip() +
scale_y_continuous(sec.axis = sec_axis(~.x, breaks = c(0.13, 0.55, 0.92),
labels = c("Oil", "Coal", "Gas"))) +
scale_x_discrete(expand = c(0.05, 0.05)) +
theme_minimal(base_size = 20) +
theme(axis.ticks = element_line())