Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plot size and resolution with R markdown, knitr, pandoc, beamer

Doesn't fit on the slide by default, doesn't even print by any other means.

Here's the .Rmd: Edit: it seems you have to use plot() in every chunk. Second plot now prints.

# Plot should show at high resolution  ```{r echo=FALSE, comment = ""} # load some data require(plyr) rbi <- ddply(baseball, .(year), summarise,     mean_rbi = mean(rbi, na.rm = TRUE)) ```  ```{r} # plot plot(mean_rbi ~ year, type = "l", data = rbi) ```  # Second attempt ```{r, fig.width = 2, fig.height = 2} plot(mean_rbi ~ year, type = "l", data = rbi) ```  # Third attempt ```{r, out.width = 2, out.height = 2} plot(mean_rbi ~ year, type = "l", data = rbi) ```  # Fourth attempt ```{r, out.width = '200px', out.height = '200px'} plot(mean_rbi ~ year, type = "l", data = rbi) ```  # Fifth attempt ```{r, out.width = '\\maxwidth'} plot(mean_rbi ~ year, type = "l", data = rbi) ``` 

Save that as test.Rmd Then compile to tex using beamer:

knit("test.Rmd") system("pandoc -s -t beamer --slide-level 1 test.md -o test.tex") 

Open test.tex in RStudio and click "Compile PDF".

I've read Yihui's documentation and hope I haven't missed something really obvious.

Edit new code incorporating Yihui's suggestions.

```{r setup, include=FALSE} opts_chunk$set(dev = 'pdf') ```  # Plot should show at high resolution  ```{r echo=FALSE, comment = ""} # load some data require(plyr) rbi <- ddply(baseball, .(year), summarise,     mean_rbi = mean(rbi, na.rm = TRUE)) ```  ```{r} # plot plot(mean_rbi ~ year, type = "l", data = rbi) ```  # Second attempt ```{r, fig.width = 4, fig.height = 4} plot(mean_rbi ~ year, type = "l", data = rbi) ``` 

sessionInfo()

 R version 3.0.1 (16/05/2013) Platform: x86_64-pc-linux-gnu (64-bit)  Local:  [1] LC_CTYPE = en_US.UTF-8 LC_NUMERIC = C LC_TIME = C LC_COLLATE = C          [5] LC_MONETARY=C        LC_MESSAGES=C        LC_PAPER=C           LC_NAME=C             [9] LC_ADDRESS=C         LC_TELEPHONE=C       LC_MEASUREMENT=C     LC_IDENTIFICATION=C   attached base packages: [1] stats     graphics  grDevices utils     datasets  methods   base       other attached packages: [1] plyr_1.8       markdown_0.6   knitr_1.2      rCharts_0.3.51 slidify_0.3.52  loaded via a namespace (and not attached):  [1] RJSONIO_1.0-3   codetools_0.2-8 digest_0.6.3    evaluate_0.4.3  formatR_0.8      [6] grid_3.0.1      lattice_0.20-15 stringr_0.6.2   tools_3.0.1     whisker_0.3-2   [11] yaml_2.1.7   
like image 656
nacnudus Avatar asked Jul 31 '13 07:07

nacnudus


People also ask

Does Rmarkdown use Pandoc?

The R package rmarkdown is a library which proceses and converts . Rmd files into a number of different formats. The core function is rmarkdown::render which stands on the shoulders of pandoc. This function 'renders the input file to the specified output format using pandoc.

How do I show plot in R markdown?

In RStudio, when you open a new RMarkdown file, in the editor pane, there is a cogwheel button / menu where you can choose "Chunk Output Inline". That should put the plots into the document.


2 Answers

I think that is a frequently asked question about the behavior of figures in beamer slides produced from Pandoc and markdown. The real problem is, R Markdown produces PNG images by default (from knitr), and it is hard to get the size of PNG images correct in LaTeX by default (I do not know why). It is fairly easy, however, to get the size of PDF images correct. One solution is to reset the default graphical device to PDF in your first chunk:

```{r setup, include=FALSE} knitr::opts_chunk$set(dev = 'pdf') ``` 

Then all the images will be written as PDF files, and LaTeX will be happy.

Your second problem is you are mixing up the HTML units with LaTeX units in out.width / out.height. LaTeX and HTML are very different technologies. You should not expect \maxwidth to work in HTML, or 200px in LaTeX. Especially when you want to convert Markdown to LaTeX, you'd better not set out.width / out.height (use fig.width / fig.height and let LaTeX use the original size).

like image 182
Yihui Xie Avatar answered Sep 27 '22 00:09

Yihui Xie


Figure sizes are specified in inches and can be included as a global option of the document output format. For example:

--- title: "My Document" output:   html_document:     fig_width: 6     fig_height: 4 --- 

And the plot's size in the graphic device can be increased at the chunk level:

```{r, fig.width=14, fig.height=12}          #Expand the plot width to 14 inches  ggplot(aes(x=mycolumn1, y=mycolumn2)) +     #specify the x and y aesthetic geom_line(size=2) +                         #makes the line thicker theme_grey(base_size = 25)                  #increases the size of the font ``` 

You can also use the out.width and out.height arguments to directly define the size of the plot in the output file:

```{r, out.width="200px", out.height="200px"} #Expand the plot width to 200 pixels  ggplot(aes(x=mycolumn1, y=mycolumn2)) +     #specify the x and y aesthetic geom_line(size=2) +                         #makes the line thicker theme_grey(base_size = 25)                  #increases the size of the font ``` 
like image 23
RRuiz Avatar answered Sep 23 '22 00:09

RRuiz