2017-07-15 151 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

感谢这个!是的,我了解双冠名问题,但已用我的实际数据解释了这一点。干杯 –