5

我使用 Github markdown 来记录我使用 R 进行的数据分析。当我制作绘图时,我使用:

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

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

!(file_name.jpg)

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

我曾尝试按顺序放置jpegandpdf调用,但只生成了底部的调用。

有没有办法在只运行一次代码期间从相同的代码生成jpeg和文件?pdf

4

3 回答 3

5

或者您可以使用dev.copy

plot(cars)
dev.copy(jpeg, "cars.jpeg")
dev.off()
dev.copy(pdf, "cars.pdf")
dev.off()
于 2013-07-17T18:22:34.813 回答
3

为什么不使用knitr?例如:

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

这将创建相同情节的 3 个版本/文件:

  1. 我的情节.png
  2. 我的情节.jpeg
  3. 我的情节.pdf
于 2013-07-17T18:17:59.170 回答
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已经在做的事情...

于 2013-07-17T18:20:25.997 回答