好的,我迷上了自制的ggplot。

我想做的是制作一个三行,一列的多面图,每个面都有不同的y轴标签。 y轴的单位都相同。这将是最方便的方法,但是谷歌搜索告诉我这可能是不可能的。

另外,我找到了使用grid.arrange的this解决方案,似乎可以使用。但是,我只想保留一个图例的图例,将其从其他两个图例中删除,但要保持间距,就好像它仍然存在一样,以便一切都很好。几年前有人使用过same problem,但是建议的解决方案已经过时了,我无法弄清如何使其在现代ggplot中工作。

任何帮助表示赞赏!使用构面将是最简单的!

使用下面的user20560的gridArrange解决方案进行编辑以添加图的副本。非常接近那里,只想找回顶部和底部刻面面板周围的盒子!

最佳答案

我假设(可能是错误的)您要添加单独的y轴标题而不是轴标签。 [如果您要更改标签,则可以在scales中使用facet_grid参数]

有一种 ggplot 方式可以做到这一点,但是您可以通过以下几种方式自己调整小技巧。

因此,以 mtcars 数据集为例

library(ggplot2)
library(grid)
library(gridExtra)

单程
p <- ggplot(mtcars, aes(mpg, wt, col=factor(vs))) +   geom_point() +
                                 facet_grid(gear ~ .)

# change the y axis labels manually
g <- ggplotGrob(p)
yax <- which(g$layout$name=="ylab")

# define y-axis labels
g[["grobs"]][[yax]]$label <- c("aa","bb", "cc")

# position of labels (ive just manually specified)
g[["grobs"]][[yax]]$y <- grid::unit(seq(0.15, 0.85, length=3),"npc")

grid::grid.draw(g)



或使用grid.arrange
# Create a plot for each level of grouping variable and y-axis label
p1 <- ggplot(mtcars[mtcars$gear==3, ], aes(mpg, wt, col=factor(vs))) +
                                 geom_point() + labs(y="aa") + theme_bw()
p2 <- ggplot(mtcars[mtcars$gear==4, ], aes(mpg, wt, col=factor(vs))) +
                                 geom_point() + labs(y="bb") + theme_bw()
p3 <- ggplot(mtcars[mtcars$gear==5, ], aes(mpg, wt, col=factor(vs))) +
                                 geom_point() + labs(y="cc") + theme_bw()

# remove legends from two of the plots
g1 <- ggplotGrob(p1)
g1[["grobs"]][[which(g1$layout$name=="guide-box")]][["grobs"]] <- NULL

g3 <- ggplotGrob(p3)
g3[["grobs"]][[which(g3$layout$name=="guide-box")]][["grobs"]] <- NULL

gridExtra::grid.arrange(g1,p2,g3)

如果是要添加的轴标题,我应该问为什么要使用不同的标题-刻面剥离文本不能吗?

09-25 12:28