Reputation: 173
I'm trying to add labels of counts to a proportion plot. Here is an example of my data and the code I've done so far.
df <- data.frame(E2A = c(1, 1, 2, 2, 1, 1, 2, 1, 2, NA),
E4A = c("P", "P", "P", NA, "G", "G", "H", "H", "H", "H"),
E5A = c("R", "R", "R", "R", "R", "O", "O", "O", "O", "O"),
Tooth = c(rep("P3", 9), NA))
ggplot(data = remove_missing(df, na.rm = TRUE, vars = c("E2A", "E4A", "E5A"))) + # remove NA's for cleaner plot
aes(x = E4A, fill = E5A) +
geom_bar(position = "fill") +
theme(plot.title = element_text(hjust = 0.5)) +
labs(x = "", y = "", fill = "Canal configurations") +
theme_bw(base_size = 14) +
theme(legend.position = "top") +
theme(axis.text.y = element_text(size = 8)) +
theme(axis.text.x = element_text(size = 10)) +
guides(fill = guide_legend(nrow = 1, byrow = TRUE)) +
facet_wrap(.~ E2A, labeller = labeller(E2A = E2_lab), scales = "free")
Is there a way to add a count lable to the stacked barchart? Below is a mock up to help visualise what Im trying to do.
Upvotes: 1
Views: 134
Reputation: 78907
We could use geom_label
this way:
ggplot(data = remove_missing(df, na.rm = TRUE, vars = c("E2A", "E4A", "E5A"))) + # remove NA's for cleaner plot
aes(x = E4A, fill = E5A) +
geom_bar(position = "fill") +
theme(plot.title = element_text(hjust = 0.5)) +
labs(x = "", y = "", fill = "Canal configurations") +
theme_bw(base_size = 14) +
theme(legend.position = "top") +
theme(axis.text.y = element_text(size = 8)) +
theme(axis.text.x = element_text(size = 10)) +
guides(fill = guide_legend(nrow = 1, byrow = TRUE)) +
facet_wrap(.~ E2A, scales = "free") +
geom_label(data = . %>%
count(E2A, E4A, E5A, Tooth),
aes(y = n, label = n),size=5,
position = position_fill(0.5),
show.legend = FALSE)
Upvotes: 1
Reputation: 66415
We could use stat = 'count'
in geom_label
to get that:
ggplot(data = remove_missing(df, na.rm = TRUE, vars = c("E2A", "E4A", "E5A"))) + # remove NA's for cleaner plot
aes(x = E4A, fill = E5A) +
geom_bar(position = "fill") +
geom_label(stat = 'count', aes(label = ..count..), position = position_fill(vjust = 0.5)) +
theme(plot.title = element_text(hjust = 0.5)) +
labs(x = "", y = "", fill = "Canal configurations") +
theme_bw(base_size = 14) +
theme(legend.position = "top") +
theme(axis.text.y = element_text(size = 8)) +
theme(axis.text.x = element_text(size = 10)) +
guides(fill = guide_legend(nrow = 1, byrow = TRUE)) +
facet_wrap(.~ E2A, scales = "free")
Upvotes: 3