基本上,我希望复制facet_grid()效果,但是有些列有自己的比例。为了演示,以下代码接近我想要的内容:
library(ggplot2)
library(reshape2)
library(gridExtra)
set.seed(65421)
gg.df1 <- data.frame(x = c(1:20, 1:20),
A = sort(rnorm(40)),
B = sort(rnorm(40))+0.5,
C = sort(rnorm(40))+1,
y_lab = c(rep('1', 20), rep('2', 20)))
gg.df1 <- melt(gg.df1, id.vars=c("x", "y_lab"))
gg.df2 <- data.frame(x = c(1:20, 1:20),
D = abs(sort(rnorm(40))*200),
E = abs(sort(rnorm(40))*205),
y_lab = c(rep('1', 20), rep('2', 20)))
gg.df2 <- melt(gg.df2, id.vars=c("x", "y_lab"))
p1 <- ggplot(gg.df1, aes(x, value)) + geom_line() + facet_grid(y_lab ~ variable) + theme(strip.text.y=element_blank(), strip.background=element_rect(fill=NA, colour=NA))
p2 <- ggplot(gg.df2, aes(x, value)) + geom_line() + facet_grid(y_lab ~ variable) + labs(y=NULL) + theme(strip.background=element_rect(fill=NA, colour=NA))
grid.arrange(p1, p2, nrow=1, widths=c(3, 2))
(我将小平面条涂成白色,因此很容易只有一组标签。)
请注意,所有构面都具有相同的x轴(在实际数据中也是如此)。但是,由于grid.arrange()和子图的性质与widths参数交互,因此两个子图之间的构面区域的大小是不同的。有没有一种好方法可以保证face.arrange()中的facet大小相同,或者使用其他命令复制此效果?
答案 0 :(得分:2)
如果组合gtables很容易,默认面板宽度为unit(1, "null")
,所以它们都是相等的
grid.draw(gtable:::cbind_gtable(ggplotGrob(p1), ggplotGrob(p2), "first"))