I have the following dataframe.
df <- data.frame(product = c("a", "b", "c", "d"),
count = c(3, 4, 6, 7),
name = c("ball", "pen", "notebook", "pencil"))
ggplot(df, aes(x = "", y = count, fill = product)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0)
Is it possible to make the legend with information of two columns? I mean, I would like to make it like: a – ball; b – pen; c – notebook; d – pencil.
I know I can merge the columns using stringr::str_c and make a new legend like this, but I would like to use a more elegant solution.
Thank you in advance.
>Solution :
What you could do is combine the columns in one line using paste0 and assign these labels in scale_fill_discrete like this:
df <- data.frame(product = c("a", "b", "c", "d"),
count = c(3, 4, 6, 7),
name = c("ball", "pen", "notebook", "pencil"))
library(ggplot2)
ggplot(df, aes(x = "", y = count, fill = product)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
scale_fill_discrete(labels = with(df, paste0(product, " - ", name)))

Created on 2022-07-19 by the reprex package (v2.0.1)
