好的,我迷上了自制的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)
如果是要添加的轴标题,我应该问为什么要使用不同的标题-刻面剥离文本不能吗?