How can I make ggplot2 give a separate legend for different geoms that both use color to represent 2 different variables. I'd want 3 legends, one for z
, a
, and b
, but a & b seem to be combined into a singe legend even though a & b represent different variables. I'd also like to be able to control the colors in each legend.
dat <- data.frame(
y = rnorm(200),
x = sample(c("A", "B"), 200, TRUE),
z = sample(100:200, 200, TRUE),
a = sample(c("male", "female"), 200, TRUE),
b = factor(sample(1:2, 200, TRUE))
)
ggplot(dat, aes(y = y, x = x)) +
geom_point(aes(color = a, size = z)) +
geom_boxplot(fill = NA, size=.75, aes(color=b)) +
scale_color_manual(values = c("#F8766D", "#00BFC4", "orange", "purple"))
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.
Seems that the legend capture approach is the most generalizable in similar situations, though in this specific on @jennybryan's is simpler and probably what most people would want. I document the legend capture approach here as well. I first learned this approach from @Sandy Muspratt HERE.