vẻ như là cách tiếp cận chụp huyền thoại là khái quát nhất trong các tình huống tương tự, mặc dù trong cụ thể này trên @ jennybryan là đơn giản và có lẽ những gì hầu hết mọi người muốn. Tôi cũng ghi lại cách tiếp cận truyền thuyết ở đây. Lần đầu tiên tôi học cách tiếp cận này từ @Sandy Muspratt HERE.
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)
Có lẽ một cách dễ dàng hơn nhưng bạn có thể làm hai lô và sau đó kết hợp những huyền thoại ... http://stackoverflow.com/questions/26727741/how-to-show-a-legend -on-kép-y-axis-ggplot/26742226 # 26742226 – user20650
@ user20650 Tôi đã nghĩ về điều đó và sẽ đi tuyến đường đó nếu cần nhưng có vẻ như sẽ có một cách dễ dàng hơn. –
Tôi có thể thấy lý do tại sao bạn muốn có riêng biệt, nhưng đối với bất kỳ thẩm mỹ khác, (minh bạch, kích thước, hình dạng, thanh màu, vv), nó không có ý nghĩa để tách chúng ra. ví dụ, độ trong suốt 0-25 là một biến và biến số khác là 26-50, nó là cùng một tỷ lệ. tất nhiên màu sắc có thể rời rạc hơn, vì vậy đó là cách nó có thể có ý nghĩa hơn .. chỉ là ý tưởng của tôi là tại sao điều này không thẳng thắn. hadley là rất cụ thể về ggplot của mình – rawr