2017-06-15 65 views
1

我想使用viewport垂直组合两个数字。数字是用ggplot和facet_grid()创建的。 出现的问题是分类变量的图例长度不同。由于 传说需要更多的地方,这导致了不同宽度的地块。我希望情节的宽度是相同的。如何对齐与视口构建的垂直组合图

我该如何解决这个问题?

这里是与不对齐的曲线的数字为例:

enter image description here

这里是产生数字代码:

# dataframe 
x <- rep(1:10,2) 
y <- x + rep(c(0,2),each=10) 
sex <- rep(c("f","m"), each=10) 
sex2 <- rep(c("fffffffff","mmmmmmmmm"), each=10) 
df0 <- data.frame(x = x, y = y, sex = sex, sex2 = sex2) 

# libraries 
library("grid") 
library("gridExtra") 
library("ggplot2") 

# Viewport 
Layout <- grid.layout(nrow = 2, ncol = 1, heights = unit(c(1,1), c("null","null"))) 
vplayout <- function(x,y) { 
     viewport(layout.pos.row=x, layout.pos.col=y) 
} 

# plot object 
p1 <- ggplot(df0,aes(x = x, y = y,linetype=sex)) + 
     geom_line() 

p2 <- ggplot(df0,aes(x = x, y = y,linetype=sex2)) + 
     geom_line()   

# figures 
tiff("test0.tiff", width=5, height=10, units="cm", res=300, compression = 'lzw') 
grid.newpage() 
pushViewport(viewport(layout= Layout)) 
print(p1 + theme_bw(base_size=5), vp = vplayout(1,1)) 
print(p2 + theme_bw(base_size=5), vp = vplayout(2,1)) 
dev.off() 
+1

看一些这里的答案(而不是接受一个)的:https://stackoverflow.com/questions/26159495/align-multiple-ggplot-graphs-with-and-without-legends – MrFlick

+1

'cowplot :: plot_grid (p1,p2 align =“v”,nrow = 2,rel_heights = c(1/2,1/2))' – Masoud

+0

@Masoud:这个函数解决了我的问题。把答案放在答案上,以便我可以接受你的解决方案。 – giordano

回答

1

您可以使用cowplot::plot_grid

# figures 
library(cowplot) 
tiff("test0.tiff", width=5, height=10, units="cm", res=300, compression = 'lzw') 
grid.newpage() 
plot_grid(p1, p2, align = "v", nrow = 2, rel_heights = c(1/2, 1/2)) 
dev.off() 

备注:我不知道你怎么设置df0所以不能出现输出图。

+0

我在问题中添加了缺少的部分以构建df0:'df0 < - data.frame(x = x,y = y,sex = sex,sex2 = sex2)''。它在复制粘贴过程中丢失了。感谢帮助。 – giordano