Plot size and resolution with R markdown, knitr, pandoc, beamer
beamer, knitr, pandoc, r, r-markdown
Solution
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).
Problem
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 ```