在R Markdown / knitr中缩略图的简单方法是什么?

时间:2016-06-15 11:23:11

标签: plot rstudio thumbnails knitr r-markdown

我在R Studio中使用R Markdown和knitr来创建和更新一个简单的项目网站,以便让我的同事了解我正在构建的数据分析模型。页面上有一些图表(对于较小的图表)到目前为止工作得很好,他们可以在同一个地方看到代码和结果。

然而,一些情节已经变得非常大(并且必须保持较大以允许快速并排比较模型),并且不能很好地适应页面。我已经使用了单独上传的pdfs(页面上有链接)。如果有一种简单的方法可以生成其中一些图的缩略图,那么用户可以查看一个小的图形图像,点击它然后再详细检查更大的图像。但是,如果每个绘图实例需要大量的手动脚本,我宁愿不浪费时间在上面,只需上传几个pdf。一个类似的问题here讨论了包knitrbootsrap,但我不想缩略图所有我的情节,只有少数几个。该软件包似乎使用Magnific popup,但将其自己集成到Markdown页面似乎很麻烦(?)。我没有在R Markdown参考guide中找到任何内容。当然,一种方法是生成两个图,一个很小,显示,并将其链接到另一个,更大的情节图像/ pdf,单独上传 - 但更简单,更自动的方式是可取的。

因此问题是 - 是否有一种更简单的方式在R Markdown中生成可点击的情节缩略图?

1 个答案:

答案 0 :(得分:1)

所以,这就是我提出的。添加一个绘图钩子,以便在块中生成小图像之前生成全分辨率的pdf图像:

allow_thumbnails <- function(x, options) {
  if (!is.null(options$thumb)) {
    filename <- sprintf("%s.full.pdf", strsplit(basename(x), "\\.")[[1]][1])
    absolute_path <- file.path(dirname(x), filename)

    # generate the full resolution pdf
    pdf(absolute_path, width = options$thumb$width, height = options$thumb$height)
      eval(parse(text = options$code))
    dev.off()

    # add an html link to the low resolution png
    options$fig.link = absolute_path
  }

  knitr:::hook_plot_md_base(x, options)
}

然后在Rmd文件中,我使用thumb参数定义全分辨率图像的大小:

```{r init} 
    knit_hooks$set(plot = allow_thumbnails)
```

```{r my_large_plot, fig.width = 15, fig.height = 15, thumb = list(width = 45, height = 45)}
    my_large_plot()
```

这将生成一个html文件,其中包含可点击的png,可将您带到pdf。