Edit:
It seems OP just wants this:
library(gridExtra) grid.arrange(p1,arrangeGrob(p2,widths=c(1,2),ncol=2), ncol=1)
I am not sure if it is possible to go absolute width to geom_bar . So here is an ugly hack:
set.seed(42) m <- data.frame(x=1:10,y=runif(10)) p1 <- ggplot(m, aes(x,y)) + geom_bar(stat="identity") p2 <- ggplot(m[1:3,], aes(x,y)) + geom_bar(stat="identity") g1 <- ggplotGrob(p1) g2 <- ggplotGrob(p2)
I used str to find the correct grob and child. You can use more sophisticated methods to generalize this if necessary.
#store the old widths old.unit <- g2$grobs[[4]]$children[[2]]$width[[1]]

source share