2015-08-10 5 views
4

Мне нужно много барных площадок для отображения по горизонтали. Я пробовал много способов и нашел grid.arrange, чтобы быть обнадеживающим, за исключением проблем с меткой оси x.Как выровнять стрижки с помощью grid.arrange?

library(ggplot2) 
library(gridExtra) 

x1 = c("x","x","y","x","y","x") 
x2 = c("NicholasKimseyLayerDad","GumpedJinseiLacks","NicholasKimseyLayerDad","NicholasKimseyLayerDad" 
     ,"GumpedJinseiLacks","GumpedJinseiLacks") 
fail = c("F","P","F","F","P","F") 
D1=data.frame(x1,fail) 
p1 = ggplot(D1,aes(x=x1,fill=fail)) + geom_bar() +geom_text(stat='bin',aes(label=..count..),vjust=-0.3,size=4,color="red")+ 
    theme(legend.position="none",axis.title.y=element_blank(),axis.text.x = element_text(angle = 90, hjust = 1)) 

p2 = ggplot(D1,aes(x=x2,fill=fail)) + geom_bar() +geom_text(stat='bin',aes(label=..count..),vjust=-0.3,size=4,color="red")+ 
    theme(legend.position="none",axis.title.y=element_blank(),axis.text.x = element_text(angle = 90, hjust = 1)) 

grid.arrange(p1,p2,ncol=2) 

enter image description here

Пожалуйста, запустите код, и я ценю это на самом деле.

В любом случае, чтобы зафиксировать высоту штрихов, чтобы метки на оси х начинались с одной и той же высоты? Большое спасибо.

+0

Добро пожаловать ТАК! В дополнение к ответу ниже, вот [релевантная ссылка] (http://stackoverflow.com/questions/13294952/left-align-two-graph-edges-ggplot). – tonytonov

ответ

7

Вы можете сделать

library(gtable) 
g1 = ggplotGrob(p1) 
g2 = ggplotGrob(p2) 
g = cbind(g1, g2, size="first") 
g$heights = grid::unit.pmax(g1$heights, g2$heights) 
grid::grid.newpage() 
grid::grid.draw(g) 

или, более компактно,

grid::grid.draw(gridExtra:::cbind_gtable(ggplotGrob(p1),ggplotGrob(p2))) 
+0

Это прекрасно. Большое спасибо. – John

+0

BTW, я не могу найти функцию cbind_gtable() в обновленном пакете gridExtra. Благодарю. – John

+0

не экспортируется – baptiste

Смежные вопросы