如何在R中为每个绘图代码生成多个文件格式?

时间:2013-07-17 18:07:29

标签: image r plot

我使用Github markdown来记录我的数据分析。当我制作一个情节时,我使用:

jpeg("file_name.jpg")
plot(...)
dev.off()

将绘图保存为jpeg,然后可以嵌入并显示在降价文档中,如下所示:

!(file_name.jpg)

但是,我还需要为最终出版物制作一个pdf的情节。目前我使用pdf("file_name.pdf")重新编写整个绘图代码,但这导致了大量基本重复的代码。

我已尝试按顺序发出jpegpdf个调用,但之后只生成了底部调用。

有没有办法在一次代码运行期间从同一代码中生成jpegpdf文件?

3 个答案:

答案 0 :(得分:5)

或者您可以使用dev.copy

plot(cars)
dev.copy(jpeg, "cars.jpeg")
dev.off()
dev.copy(pdf, "cars.pdf")
dev.off()

答案 1 :(得分:3)

为什么不使用knitr?例如:

```{r myplot,fig.width=7, fig.height=6,dev=c('png','pdf','jpeg')}
plot(cars)
```

这将创建同一图表的3个版本/文件:

  1. myplot.png
  2. myplot.jpeg
  3. myplot.pdf

答案 2 :(得分:3)

@ agstudy的答案很聪明。我认为,规范的答案是,如果你有很多重复的代码,你可以创建一个小实用函数并运行它两次:

tmpplotfun <- function() { ... lots of plot code ... }
pdf(...)
tmpplotfun()
dev.off()
jpeg(...)
tmpplotfun()
dev.off()

你甚至可以进一步抽象出来:

plot_twice <- function(plotfun,...) {
   pdf(...)
   plotfun()
   dev.off()
   jpeg(...)
   plotfun()
   dev.off()
}
plot_twice(tmpplotfun)

...有了更多的聪明才智,你可以复制knitr已经在做的事情......