it does not work because ggsave
wants an object of class ggplot
, while you’re passing a grob. arrangeGrob
will sometimes trick ggsave
in pretending inheritance from ggplot
, but only when at least one of the grobs belongs to this class; here, however, you’re only passing a gtable
.
Perhaps the easiest workaround is to clone ggsave and bypass the class check,
ggsave <- ggplot2::ggsave; body(ggsave) <- body(ggplot2::ggsave)[-2]
Edit: The dev version of ggplot2 no longer requires this hack*, as ggsave
now works with any grob.
*PS: this hack works no longer, as arrangeGrob now returns a gtable, and its print method does not draw on a device.