Es scheint, dass die Legende Capture-Ansatz des verallgemeinerbar in ähnlichen Situationen, wenn auch in diesem speziellen auf @ jennybryan das ist einfacher und wahrscheinlich das, was die meisten Menschen wünschen würden. Ich dokumentiere auch den Ansatz der Legendenerfassung. Ich lernte diesen Ansatz zuerst von @Sandy Muspratt .
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))
)
if (!require("pacman")) install.packages("pacman")
pacman::p_load(ggplot2, grid, gridExtra, gtable)
coldot <- 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"))
colbox <- 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("orange", "purple"))
leg1 <- gtable_filter(ggplot_gtable(ggplot_build(coldot)), "guide-box")
leg1Grob <- grobTree(leg1)
leg2 <- gtable_filter(ggplot_gtable(ggplot_build(colbox)), "guide-box")
leg2Grob <- grobTree(leg2)
noleg <- ggplot(dat, aes(y = y, x = x)) +
geom_point(aes(color = a, size = z)) +
geom_boxplot(fill = NA, size=.75, aes(color=b), position=position_dodge(1)) +
scale_color_manual(values = c("orange", "purple", "#F8766D", "#00BFC4")) +
theme(
plot.margin = unit(c(5.1, 4.1, 4.1, 2.1), "pt"),
legend.position=c(1.3, 0.87)
) +
guides(color = FALSE)
legs <- ggplot(data = data.frame(x=1, y=1)) +
geom_blank(aes(x=x, y=y)) +
theme_minimal() +
ylab(NULL) + xlab(NULL) +
theme(
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()
) +
annotation_custom(leg1Grob, xmin=1, xmax=1, ymin=.95, ymax=1.3) +
annotation_custom(leg2Grob, xmin=.6, xmax=.8, ymin=.75, ymax=1)
out <- arrangeGrob(noleg, legs, ncol=2, widths=c(.85, .15))
print(out)
Wahrscheinlich ein einfacher Weg, aber man zwei Parzellen tun könnte und dann die Legenden verbinden ... http://stackoverflow.com/questions/26727741/how-to-show-a-legend -on-dual-y-axis-ggplot/26742226 # 26742226 – user20650
@ user20650 Ich dachte darüber nach und werde diese Route gehen, wenn es sein muss, aber es scheint so, als sollte es einen einfacheren Weg geben. –
Ich kann sehen, warum Sie sie getrennt haben möchten, aber für jede andere Ästhetik (Transparenz, Größe, Form, Farbbalken, etc.), macht es keinen Sinn, sie zu trennen. zB Transparenz 0-25 ist eine Variable und die andere Variable ist 26-50, es ist die gleiche Skala. natürlich können Farben diskreter sein, so dass es mehr Sinn machen könnte ... nur meine Idee, warum das nicht einfach ist. hadley ist sehr speziell über seine ggplot – rawr