Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove extra legends in ggplot2

Tags:

r

legend

ggplot2

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 <code>geom_point</code> transparency

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

like image 606
Wilduck Avatar asked Jul 30 '12 03:07

Wilduck


People also ask

How do I remove a legend from ggplot2?

By specifying legend. position=”none” you're telling ggplot2 to remove all legends from the plot.

How do I get rid of legends?

Tip: To quickly remove a legend or a legend entry from a chart, you can select it, and then press DELETE. You can also right-click the legend or a legend entry, and then click Delete.

How do I remove the legend from a title in R?

To remove legend title, its legend. title attribute is set to element_blank(). Example: Removing legend title with theme().

How do I change the legend value in ggplot2?

You can use the following syntax to change the legend labels in ggplot2: p + scale_fill_discrete(labels=c('label1', 'label2', 'label3', ...))


2 Answers

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

like image 122
mnel Avatar answered Sep 22 '22 13:09

mnel


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) 
like image 24
CSV Avatar answered Sep 22 '22 13:09

CSV