Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ggplot2 make legend key fill transparent

Tags:

I am trying to make the legend key fill for a ggplot transparent. I followed the instructions on one of Hadley's ggplot2 guides for changing the legend key fill, but for some reason when I set the fill to transparent it fills with gray. Even when I set the legend key fill to white, it still appears gray in the final plot.

Here is an example:

library(ggplot2)  data1 = c(0,10, 11, 23, 33, 40, 41, 50, 59, 68, 76, 88, 90, 99) data2 = c(2, 8, 10, 22, 39, 47, 49, 55, 62, 70, 76, 86, 88, 95)  df = data.frame(data1, data2)  (plot = ggplot() +   geom_smooth(data=df, aes(data1, data2,colour="sample1"))+   geom_abline(intercept=0, slope=1,linetype="dashed", color = "black")+   scale_x_continuous(expand=c(0,0), limits=c(0,100)) +    scale_y_continuous(expand=c(0,0), limits=c(0,100))+   theme_classic()+   labs(y="data2", x="data1",         title="sample 1 data1 vs data2") +   theme(plot.title = element_text(size=18, face="bold"),         legend.key = element_rect(colour = "transparent", fill = "white"),         legend.justification = c(1,0), legend.position = c(1,0))+   scale_color_discrete(name="Sample") ) 

Example_plot

If I set theme(legend.key = element_rect(colour = "transparent", fill = "red")) I get the following plot: red_fill

So it appears that I can change the legend key fill, but just not to the color white or transparent.

Does anyone know what I am doing wrong, or if there is just no way to make the legend key fill transparent/white ?

EDIT: Setting theme(legend.key = element_rect(fill = alpha("white", 0.0))) Does not fix the problem.

See here:

library(ggplot2) library(scales)  data1 = c(0,10, 11, 23, 33, 40, 41, 50, 59, 68, 76, 88, 90, 99) data2 = c(2, 8, 10, 22, 39, 47, 49, 55, 62, 70, 76, 86, 88, 95)  df = data.frame(data1, data2)  (plot = ggplot() +   geom_smooth(data=df, aes(data1, data2,colour="sample1"))+   theme_classic()+   labs(y="data2", x="data1",         title="sample 1 data1 vs data2") +   theme(plot.title = element_text(size=18, face="bold"),         legend.key = element_rect(colour = "transparent", fill = alpha("red", 0)),         legend.justification = c(1,0), legend.position = c(1,0))+   scale_color_discrete(name="Sample") ) 

EDIT2: If I use geom_line() instead of geom_smooth I am able to set the legend key fill to NA, so it must be because the line in geom_smooth has a gray area for the confidence interval around it, therefore the legend key mirrors that look.

(plot = ggplot() +   geom_smooth(data=df, aes(data1, data2,colour="sample1"))+   geom_abline(intercept=0, slope=1,linetype="dashed", color = "black")+   scale_x_continuous(expand=c(0,0), limits=c(0,100)) +    scale_y_continuous(expand=c(0,0), limits=c(0,100))+   theme_classic()+   labs(y="data2", x="data1",         title="sample 1 data1 vs data2") +   theme(plot.title = element_text(size=18, face="bold"),         legend.key = element_rect(colour = NA, fill = NA),         legend.justification = c(1,0), legend.position = c(1,0))+   scale_color_discrete(name="Sample") ) 

geom_line

like image 774
Reilstein Avatar asked Jan 30 '16 23:01

Reilstein


People also ask

How do I remove GREY background from legend in R?

To remove grey color from legend display using ggplot2, we can use theme function where we can fill legend. key argument to white with element_rect.

How do I change the legend label in ggplot2?

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

How to add a legend to ggplot?

Adding a legend If you want to add a legend to a ggplot2 chart you will need to pass a categorical (or numerical) variable to color , fill , shape or alpha inside aes . Depending on which argument you use to pass the data and your specific case the output will be different.


1 Answers

I was going crazy with this behavior as well, so here is a working solution for your example:

plot + guides(color=guide_legend(override.aes=list(fill=NA))) 

Check this thread for more information.

like image 150
bontus Avatar answered Sep 24 '22 17:09

bontus