ggplot2 custom legend shapes

Ali picture Ali · Nov 19, 2012 · Viewed 17k times · Source

When we have both shape and color legend in scatter plot, the shape of color legend is misleading:

foo <- data.frame(
  length=runif(10),
  height=runif(10),
  group=as.factor(sample(3,10,rep=T)),
  quality=as.factor(sample(2,10,rep=T))
)

ggplot(foo, aes(x = length, y = height, color=group, shape=quality)) + 
  geom_point(size=5)

This will produce the plot below. As you see, the "circle" shape is reserved for the objects of quality==1, however in the group legend, all 3 groups are presented in "circle" shapes - with different colors, this can be misleading.

It was too much better if the group legend was represented by a shape not already reserved for a specific purpose, like just to fill the whole legend item with the specific color.

Do you have any simple idea how to solve this?

enter image description here

Answer

Sven Hohenstein picture Sven Hohenstein · Nov 19, 2012

It is possible to manually change the properties of the legend using guides:

ggplot(foo, aes(x = length, y = height, color=group, shape=quality)) + 
  geom_point(size=5) + 
  guides(colour = guide_legend(override.aes = list(shape = 15)))

Just play around with the shape paramater to find an appropriate shape.

enter image description here