ggplot2 plot fill page in landscape (pdf)

13,503

See this discussion; bottom-line is you probably want to use paper=special and set width and height explicitly.

Edit:

Here's a lazy trick to use ggsave with multiple pages,

library(ggplot2)
plots = replicate(8, qplot(1,1), simplify=FALSE)
library(gridExtra)
p <- do.call(marrangeGrob, c(plots,ncol=1,nrow=1))

ggsave("multipage.pdf", p, width=11, height=8.5)

(but otherwise, pdf(...) followed by a for loop is just fine and sometimes clearer)

Share:
13,503

Related videos on Youtube

Dave
Author by

Dave

I try to help out when I can.

Updated on September 14, 2022

Comments

  • Dave
    Dave over 1 year

    I'm trying to render a plot to a PDF using the following approach:

    pdf('~/Desktop/test.pdf', bg = "white", paper="USr")    
    p <- ggplot(df, aes(something)) + geom_bar();
    print(p)
    # I'm actually printing a bunch of graphs to the PDF
    dev.off()
    

    The "USr" in the PDF function is setting up the PDF to print in landscape mode. The plot is produced and is centered on the page but there is a large right/left margin and the plot isn't scaling out to take up the full 11" available to it.

    I've tried some tweaks to the pdf(...) command and to the ggplot itself. Is there a solution this way or do I need to use a dedicated reporting/pdf package like sweave or knitr?

    • Beasterfield
      Beasterfield almost 11 years
      What happens when you use ggsave( "~/Desktop/test.pdf", ... ) and specify the width and height explicitly?
  • TheSciGuy
    TheSciGuy about 5 years
    Not lazy at all! Efficient!
  • Von
    Von over 4 years
    FWIW, this only worked for me if I specified the arguments to marrangeGrob as a list: p <- do.call(marrangeGrob, args = list(grobs = plots, ncol=1, nrow=1)); otherwise I got a missing argument error