Assign color to 2 different geoms and get 2 different legends
If you use a filled plotting symbol, you can map one factor to fill and the other to colour, which then separates them into two scales and, therefore, legends.
ggplot(dat, aes(y = y, x = x)) +
geom_point(aes(fill = a, size = z), pch = 21) +
geom_boxplot(fill = NA, size=.75, aes(color=b)) +
scale_color_manual(values = c("orange", "purple")) +
scale_fill_manual(values = c("#F8766D", "#00BFC4"))
ggnewscale
makes this very easy:
library(ggplot2)
library(ggnewscale)
ggplot(dat, aes(y = y, x = x)) +
geom_point(aes(color = a, size = z)) +
scale_color_brewer(palette = 'Dark2') +
new_scale_color() +
geom_boxplot(fill = NA, aes(color = b)) +
scale_color_brewer(palette = 'Paired')
Created on 2020-01-08 by the reprex package (v0.3.0)
Any scale_color
can be used as usual. I chose scale_color_brewer for convenience