2017-07-15 142 views
1

我在R中使用ggplot2包中的facet_wrap()繪製多個圖。當由多個變量分面時,結果包括條形文本中的兩個標籤。我怎樣才能刪除一個?僅在facet_wrap條文本中顯示一個變量標籤?

在這個從mpg數據集的玩具示例中,如何僅保留cyl標籤?由於

ggplot(mpg, aes(displ, hwy)) + 
    geom_point() + 
    facet_wrap(c("cyl", "drv")) 

enter image description here

+0

也許你看起來ng代表'facet_grid(cyl〜drv)'而不是'facet_wrap'。 – student

+0

另外,因爲我懷疑你不想要空的地塊,所以我建議你用適當的級別創建一個新的列「cyl_drv」,然後你可以做'facet_wrap(〜cyl_drv)'。 – student

+0

如果你使用'drv',然後只保留'cyl'的標籤,這是沒有意義的。如果你只保留'cyl',你將會有幾個有標籤8的方面。你的情節的讀者如何區分具有相同標籤的幾個方面? – aelwan

回答

3

這個最大的問題是@aelwan提到的幾個地塊將有相同帶標籤,但也不盡相同。忽略此問題,我相信最好的方法是在cyldrv之間創建一個新的交叉變量。

所以,如果你只是想要一個排爲帶標籤就可以,例如:

ggplot(mpg %>% mutate(cyl_drv = paste0(cyl, '-', drv)), aes(displ, hwy)) + 
    geom_point() + 
    facet_wrap(~ cyl_drv) 

然後,您可以更改標籤,如果你需要如下:

ggplot(mpg %>% mutate(cyl_drv = paste0(cyl, '-', drv)), aes(displ, hwy)) + 
    geom_point() + 
    facet_wrap(~ cyl_drv, labeller = as_labeller(c(`4-4`="4", `4-f`="4", `5-f`=5, `6-4`=6, `6-f`=6, `6-r`=6, `8-4`=8, `8-f`=8, `8-r`=8))) 

另一個(當然不很好)的方式來改變它如下(我懷疑有一個更好的辦法):

library(ggplot2) 
library(ggExtra) 
library(grid) 
library(gtable) 
gg <- ggplot(mpg, aes(displ, hwy)) + 
    geom_point() + 
    facet_wrap(~ cyl * drv) 

g1 <- ggplot(mpg, aes(displ, hwy)) + 
    geom_point() + 
    facet_wrap(~ cyl) 

gtab <- ggplotGrob(gg) 

gtab$grobs[[47]] <- ggplotGrob(g1)$grobs[[23]] 
gtab$grobs[[48]] <- ggplotGrob(g1)$grobs[[23]] 
gtab$grobs[[49]] <- ggplotGrob(g1)$grobs[[23]] 
gtab$grobs[[50]] <- ggplotGrob(g1)$grobs[[22]] 
gtab$grobs[[51]] <- ggplotGrob(g1)$grobs[[22]] 
gtab$grobs[[52]] <- ggplotGrob(g1)$grobs[[22]] 
gtab$grobs[[53]] <- ggplotGrob(g1)$grobs[[24]] 
gtab$grobs[[54]] <- ggplotGrob(g1)$grobs[[24]] 
gtab$grobs[[55]] <- ggplotGrob(g1)$grobs[[25]] 

grid.draw(gtab) 
+0

感謝這個!是的,我瞭解雙冠名問題,但已用我的實際數據解釋了這一點。乾杯 –