2013-07-02 164 views
1

我試圖將多個圖例顯示爲表格。例如,ggplot2:多個圖例如表

library(ggplot2) 

dat <- data.frame(
    x = rep(1:4, 4), 
    y = c(1:4, 2:5, 3:6, 4:7), 
    a = rep(rep(c("a1", "a2"), each=4), 2), 
    b = rep(c("b1", "b2"), each=8)) 

ggplot(dat, aes(x=x, y=y, colour=b, shape=a)) + 
    geom_point()+ facet_wrap(~ b) 

我可以得到不同顏色和不同形狀的多個圖例。但我想展示我的傳奇,如

 b1 | b2 
-------------- 
a1 | o | o 
a2 |^|^

我該如何畫這樣的傳奇?

回答

0

下面是一個例子:

p <- ggplotGrob(ggplot(dat, aes(x=x, y=y, colour=b, shape=a)) + 
    geom_point()+ facet_wrap(~ b) + theme(legend.position = "none")) 

leg <- ggplotGrob(ggplot(unique(subset(dat, select = a:b)), aes(a, b, colour=b, shape=a)) + geom_point() + 
    coord_equal() + 
    theme_minimal() + 
    theme(legend.position = "none", axis.ticks = element_blank(), axis.title = element_blank())) 

library(gtable) 
grid.newpage() 
pushViewport(vp = viewport(width = 0.8, x = 0.4)) 
grid.draw(p) 
popViewport() 
pushViewport(vp = viewport(width = 0.2, x = 1-0.1)) 
grid.draw(leg) 
popViewport() 

enter image description here

而且你可以通過自定義theme調整的出現。

+0

您可以翻轉a和b,並使用構面標題將標籤放在圖例上方。 – baptiste

+0

也是,這很瘋狂。在一個好方法。你應該寫一個'傳奇'包。 – baptiste