我一直在使用cowplot :: plot_grid来安排多个ggplot数字,这些数字一般都很好用。但是,我现在遇到了一个问题,我想在底部的情节中包含x轴标签,但它最终会压缩所有的图(使用align =" vh")或者列中最低的图(使用align =" v")。
是否有任何方法可以提取x轴标签grob,并将其添加为plot_grid中的另一个图(对于图例可能类似于https://github.com/wilkelab/cowplot/blob/master/vignettes/shared_legends.Rmd)?还是另一种方法?
感谢您的任何想法!
library(ggplot2)
library(cowplot)
a = data.frame(a = rnorm(100), b = rep(c("laskjdflsakjd", "cknmlokfjoweijojf"), 50))
b = data.frame(a = rnorm(100), b = rep(c("laskjdflsakjd", "cknmlokfjoweijojf"), 50))
c = data.frame(a = rnorm(100), b = rep(c("laskjdflsakjd", "cknmlokfjoweijojf"), 50))
aplot = ggplot(a, aes(x=b, y=a)) + geom_bar(stat = "identity")
bplot = ggplot(b, aes(x=b, y=a)) + geom_bar(stat = "identity")
cplot = ggplot(c, aes(x=b, y=a)) + geom_bar(stat = "identity") + theme(axis.text.x = element_text(angle=90, vjust = 0.5))
plot_grid(aplot + theme(axis.text.x = element_blank(), axis.title.x = element_blank()),
bplot + theme(axis.text.x = element_blank(), axis.title.x = element_blank()),
cplot, ncol = 1, align = "vh")
答案 0 :(得分:0)
你可以直接玩相对高度,虽然它可能需要相当多的修补(并且会随着你的地块尺寸变化而改变)。此外,对于单个列,您应该只能使用align = "v"
- " h"选项也试图排列图的底部(因此为什么它重新添加轴标签的空间)。
这对我来说效果很好:
plot_grid(aplot + theme(axis.text.x = element_blank(), axis.title.x = element_blank())
, bplot + theme(axis.text.x = element_blank(), axis.title.x = element_blank())
, cplot
, ncol = 1
, align = "v"
, rel_heights = c(0.5,0.5,1)
)
此外,这是强制性的建议,考虑facet_wrap
虽然您的实际用例可能不允许。
最后,我过去曾试图提取轴来做你的建议:它不顺利。我有很大的问题让他们正确排队并最终放弃尝试返回设置rel_heights
为了完整起见,这是一种使用facet_wrap
的方法(使用bind_rows
中的dplyr
):
df <-
bind_rows(a = a, b = b, c = c
, .id = "df")
ggplot(df, aes(x=b, y=a)) +
geom_bar(stat = "identity") +
facet_wrap(~df, ncol = 1) +
theme(axis.text.x = element_text(angle=90, vjust = 0.5))