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") )
If I set theme(legend.key = element_rect(colour = "transparent", fill = "red"))
I get the following plot:
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") )
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.
You can use the following syntax to change the legend labels in ggplot2: p + scale_fill_discrete(labels=c('label1', 'label2', 'label3', ...))
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With