Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change the symbol in a legend key in ggplot2

Tags:

r

ggplot2

This R code produces a ggplot2 graph in which the legend key contains the letter "a" repeated in red, blue and green.

x <- rnorm(9); y <- rnorm(9); s <- rep(c("F","G","K"), each = 3)
df <- data.frame(x, y, s)

require(ggplot2)
ggplot(df, aes(x = x, y = y, col = s, label = s)) + 
geom_text() +
scale_colour_discrete(name = "My name", breaks = c("F","K","G"), labels = c("Fbig","Kbig","Gbig")) 

I would like to replace the repeated "a" in the legend key with "F", "K" and "G".

Is this possible please? Thank you.

like image 297
Julian Stander Avatar asked Feb 22 '15 14:02

Julian Stander


1 Answers

Adapting code for this answer: The idea is to inhibit the geom_text legend, but to allow a legend for geom_point, but make the point size zero so the points are not visible in the plot, then set size and shape of the points in the legend in the guides statement

x <- rnorm(9); y <- rnorm(9); s <- rep(c("F","G","K"), each = 3)
df <- data.frame(x, y, s)
#
require(ggplot2)
#
ggplot(df, aes(x = x, y = y, colour = s, label = s)) +
   geom_point(size = 0, stroke = 0) +  # OR  geom_point(shape = "") +
   geom_text(show.legend = FALSE) +
   guides(colour = guide_legend(override.aes = list(size = 5, shape = c(utf8ToInt("F"), utf8ToInt("K"), utf8ToInt("G"))))) +
   scale_colour_discrete(name = "My name", breaks = c("F","K","G"), labels = c("Fbig","Kbig","Gbig")) 

enter image description here

like image 78
Sandy Muspratt Avatar answered Nov 18 '22 04:11

Sandy Muspratt