Remove extra legends in ggplot2

RGgplot2Legend

R Problem Overview


I have a simple data frame that I'm trying to do a combined line and point plot using ggplot2. Supposing my data looks like this:

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
                 group=c(rep("a",10),rep("b",10)))

And I'm trying to make a plot:

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8))
g

The result looks fine with one exception. It has an extra legend showing the alpha for my geom_point layer.

Extra Legend for geom_point transparency

How can I keep the legend showing group colors, but not the one that shows my alpha settings?

R Solutions


Solution 1 - R

Aesthetics can be set or mapped within a ggplot call.

  • An aesthetic defined within aes(...) is mapped from the data, and a legend created.
  • An aesthetic may also be set to a single value, by defining it outside aes().

In this case, it appears you wish to set alpha = 0.8 and map colour = group.

To do this,

Place the alpha = 0.8 outside the aes() definition.

g <- ggplot(df, aes(x = x, y = y, group = group))
g <- g + geom_line(aes(colour = group))
g <- g + geom_point(aes(colour = group), alpha = 0.8)
g

enter image description here

For any mapped variable you can supress the appearance of a legend by using guide = 'none' in the appropriate scale_... call. eg.

g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
        geom_line(aes(colour = group)) +
        geom_point(aes(colour = group, alpha = 0.8))
g2 + scale_alpha(guide = 'none')

Which will return an identical plot

EDIT @Joran's comment is spot-on, I've made my answer more comprehensive

Solution 2 - R

Just add the show.legend = F code after the part where you don't want it.

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F)

Solution 3 - R

For old versions of ggplot2 (versions before 0.9.2, released in late 2012), this answer should work:

I tried this with a colour_scale and it did not work. It appears that the colour_scale_hue item works like a function with a default parameter TRUE. I added scale_colour_hue(legend=FALSE) and it worked.

I am not sure if this is the case for all color scale items in ggplot

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionWilduckView Question on Stackoverflow
Solution 1 - RmnelView Answer on Stackoverflow
Solution 2 - RCSVView Answer on Stackoverflow
Solution 3 - RGeorgetteView Answer on Stackoverflow