knitr printing list of graphs in .Rnw

I want to print list of graphs throw .Rnw. Wonder how to accomplish the task.

\documentclass{article}


\begin{document}
\SweaveOpts{concordance=TRUE}

\begin{figure}[H]
<< label = Plot >>=
library(tidyverse)
Ys <- c("disp", "hp", "drat", "wt", "qsec")

Plots <- 
  Ys %>% 
  map(function(y)
    ggplot(data = mtcars, mapping = aes(x = mpg, y = y)) +
      geom_point(aes_string(y = y))
  )

print(Plots)
@
\end{figure}


\end{document}

try:

\documentclass{article}

\begin{document}
\SweaveOpts{concordance=TRUE}

<< label = Plot >>=
library(tidyverse)
Ys <- c("disp", "hp", "drat", "wt", "qsec")

Plots <- 
  Ys %>% 
  map(function(y)
    ggplot(data = mtcars, mapping = aes(x = mpg, y = y)) +
      geom_point(aes_string(y = y))
  )

@

<<results=tex,echo=FALSE, >>=

for(i in 1:length(Plots)){
file=paste("myfile", i, ".png", sep="")
png(file, res = 80)
print(Plots[[i]])
dev.off()
cat(  "\\begin{figure}\n\\includegraphics{", file, "}\n\n\\end{figure}\n", sep="")
}
@

\end{document}

It is really advisable to switch to knitr
Putting 4 plots in one
\documentclass{article}


\begin{document}
\SweaveOpts{concordance=TRUE}
\begin{figure}

<< label = Plot , fig=TRUE,results=hide>>=
library(tidyverse)
library(gridExtra)
Ys <- c("disp", "hp", "drat", "wt", "qsec")

plotLlist<-list()
for (i in 1:length(Ys)) {
  plotLlist[[i]]<- ggplot(data = mtcars,  aes_string(x = "mpg", y = Ys[i])) +
  geom_point(aes_string(y = Ys[i]))

}
print(grid.arrange(grobs =plotLlist[1:4], nrow = 2))

@
\end{figure}


\end{document}

r - knitr printing list of graphs in .Rnw, I want to print list of graphs throw .Rnw . Wonder how to accomplish the task. \​documentclass{article} \begin{document} \SweaveOpts{concordance=TRUE}  Normally you need to import knit_print in your package namespace via importFrom(knitr, knit_print) (or roxygen: #' @importFrom knitr knit_print) (see the printr package for an example). If you don’t want to import knitr , you can call registerS3method() in your .onLoad() hook (see rstudio/htmltools#108 for an example);

You can use one of the variations on purrr::walk to silently map over the list of plots and save them with ggsave. walk2 maps over two lists, or iwalk maps over a list and its names. iwalk is really simple if you give the plot list names; the way I did it here is a little awkward, but in the wild, such as when plotting from a data frame that's been split, or with a vector that already has names, it could be different.

aes_string is used for creating aes calls programmatically, but it's being deprecated in favor of tidy eval; one example of this is in the aes docs, but I also was reminded of how to do it by this answer.

I first name the vector, with its own values as its names. Then I map over it and apply a function that takes a string y and creates a symbol of it using rlang::sym. This allows me to use tidy eval to create a bare column name with !!y_sum.

# https://stackoverflow.com/a/50726130/5325862
Plots <- Ys %>%
  setNames(., nm = .) %>%
  map(function(y) {
    y_sym <- rlang::sym(y)

    ggplot(data = mtcars, aes(x = mpg, y = !!y_sym)) +
      geom_point()
  })

Example of one plot in the list, which can be accessed by name:

Plots$hp

Then to save the plots, iwalk over using the names to create filenames. You can add additional parameters to ggsave, such as dimensions and resolution.

Plots %>%
  iwalk(~ggsave(filename = sprintf("%s_vs_mpg.png", .y), plot = .x))
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image
#> Saving 7 x 5 in image

You can do everything in one step if you need: map along to make plots and save in a single function. I went with the approach of saving the plots to a list, since that's what you did in the question, and that allows you to pull up individual plots in your document, rather than only saving them as files.

Minimal examples, Regardless of which format you use, the basic idea is the same: knitr extracts R code in There are two types of R code: chunks (code as separate numerical results are printed and plots are inserted in the output as well. It can also tangle R source code from the input document ( purl() is a wrapper to knit(, tangle = TRUE) ). The knitr.purl.inline option can be used to also tangle the code of inline expressions (disabled by default).

This will create the five pngs in the working directory, (which is the location of the Rnw file, unless you've modified it with something like opts_knit$set(root.dir='../../')).

Ys %>% 
  purrr::iwalk(
    ~ggplot(mtcars, aes_string(x = "mpg", y = .x)) +
        geom_point() +
        ggsave(filename = .y, device = "png")
  )

An Introduction to the printr Package, Rnw; LyX source: knitr-graphics.lyx; PDF output: knitr-graphics.pdf makes the font styles in plots consistent with the document class (using serif fonts). we can add an option dev.args = list(pointsize = 10) to the chunk. The markup code that caused the printing of the code for the graph was: <<graph1-code, ref.label="graph1", eval=FALSE, echo=TRUE>>= Notice the use of ref.label="graph1" to identify the code chunk that is

[PDF] Sweave and Knitr code chunks, To enable the printing methods defined in this package, just library(printr) or loadNamespace('printr') in a code chunk (in the beginning) of your knitr document. Rnw (R + LaTeX), *. with colunm names dimnames(x) = list(NULL​, head(LETTERS, ncol(x))) x lattice, levelplot, Level plots and contour plots. A Beginner’s Tutorial for knitr. My first homework assignment for my Machine Learning class was a mess. I was copying and pasting code into my LaTeX file, I was manually running and saving graphs in R as PNGs and PDFs. There has to be an easier way of doing this, I thought. A search or two later and I learned about knitr.

RMarkdown + Knitr, and processing technologies, we have a fairly large family of document types among Rnw -> tex, or from Rmd -> md, will scan the document for “code chunks”, B. For HTML output, the best we can do is save a graph, but does not allow it to  Changing the font size of figure captions in RMarkdown HTML output Caption font color with kable Figure captions with multiple plots in one chunk reference a previously defined object in a `knitr` Rnw chunk figure caption Put table captions on top when knitting Word .doc with R markdown Short caption fig.scap in knitr not working?

knitr - Vanderbilt Biostatistics Wiki, In the case of papers, only output will typically be given - tables and graphs. Early version of knitr were compatible with Rnw files, though more recent versions drop that See this Rstudio page for a list of all the output formats supported. Here is a little toy example using knitr, LaTeX/MiKTeX and Google Docs.Say you had a list on Google Docs (say a list of attendants) and you want to print a report with it..Then see this example using this Rnw-file and the outputmake the tex-file wit

Comments
  • Are you using knitr (not Sweave)? If so, knitr can save the graphs as files too.
  • I'm using knitr.
  • Thanks @imi for your answer. This is not working for me. Any thoughts.
  • any error? or it is about the layout? what is your operating system?
  • Working now. Thanks
  • Thanks @imi for the nice solution. Would appreciate if you guide me how to put four figures in one page. Thanks
  • Following page will help you. cran.r-project.org/web/packages/egg/vignettes/Ecosystem.html
  • Thanks @camille for your answer. I'm still not able to get it correctly. Please see my edits and suggest any solution. Thanks
  • What exactly doesn't work? And what's the reason for not using Rmarkdown, which should be able to do this more simply?
  • Thanks @wibeasley for your answer. I'm still not able to get it correctly. Please see my edits and suggest any solution. Thanks