How to merge color, line style and shape legends in ggplot

Solution 1:

Use labs() and set the same value for all aesthetics defining the appearance of geoms.

library('ggplot2')
ggplot(iris) + 
  aes(x = Sepal.Length, y = Sepal.Width, 
      color = Species, linetype = Species, shape = Species) +
  geom_line() +
  geom_point() +
  labs(color  = "Guide name", linetype = "Guide name", shape = "Guide name")

Solution 2:

The R Cookbook section on Legends explains:

If you use both colour and shape, they both need to be given scale specifications. Otherwise there will be two two separate legends.

In your case you need specifications for shape and linetype.

Edit

It was important to have the same data creating the shapes colors and lines, I combined your interaction phase by defining the column directly. Instead of scale_linetype_discrete to create the legend, I used scale_linetype_manual to specify the values since they will take on four different values by default.

If you would like a detailed layout of all possible shapes and line types, check this R Graphics site to see all of the number identifiers:

df.merged$int <- paste(df.merged$Type, df.merged$Method, sep=".")

ggplot(df.merged, aes(x, y, colour = int, linetype=int, shape=int)) +
  geom_line() +
  geom_point() +
  scale_colour_discrete("") +
  scale_linetype_manual("", values=c(1,2,1,2)) +
  scale_shape_manual("", values=c(17,17,16,16))

enter image description here