【问题标题】:How to display plot images in Rmarkdown through a for loop?如何通过 for 循环在 Rmarkdown 中显示绘图图像?
【发布时间】:2018-06-12 18:57:06
【问题描述】:

我正在处理 svg 的列表以打印到 html 文档。我正在使用magick 包,以为我愿意使用其他包/解决方案。下面的代码是我尝试呈现我的 html 文档。但是,它不是将svg 呈现到 html 文件,而是简单地将元数据打印到文档中。有没有办法克服这种行为?

---
title: "My Test Report"
author: "Nicholas Hayden"
date: "6/12/2018"
output: html_document
---

```{r setup, set-options, include=FALSE, warning=FALSE}
library(rsvg)
library(magick)

paths <- c(
"~/path/to/my1.svg",
"~/path/to/my2.svg")

for (i in 1:length(paths)) {
  print(image_read_svg(paths[i]))
}
```

编辑:

一些说明问题的例子。

Rmd 命令:

![]("~/path/to/my1.svg") 失败并产生...

File "/Users/nicholashayden/Desktop/path/to/my1.svg" not found in resource path
Error: pandoc document conversion failed with error 99

正如@mikeck 指出的那样。这可能是一个路径问题。但是,尝试不使用 ~ 会产生相同的错误。


&lt;img src="/Users/nicholashayden/path/to/my1.svg"&gt; 的 html 纯文本将图像放在 html 文档中,而 ~ 版本失败并出现与之前相同的错误。


knitr::include_graphics() 方法生成带有绝对路径或带有~ 的路径的空格


【问题讨论】:

    标签: r svg r-markdown


    【解决方案1】:

    我想你想用include_graphics:

    ```{r}
    for (i in 1:length(paths)) {
      print(knitr::include_graphics(paths[i]))
    }
    ```
    

    【讨论】:

    • knitr::include_graphics(paths[i]) 无法在 html 文档中显示矢量图形。它会产生一个空白。
    • @Nicholas,当您查看 html 文档的源代码时,图像路径真的有意义吗?如果您不将 knitr 输出保存到当前目录,则可能需要提供绝对路径,或者修复您在 paths 中指定的相对路径。
    • 我不太清楚该怎么做。我进入 vim 并点击 ? 并查找我的文件路径,但它不存在。以其他方式进行故障排除 - 简单地编写,image_read_svg(paths[i]) 在 for 循环之外将图像打印到 html 文件。所以,我不太确定这是一个路径问题,除非~ 可能不被视为绝对路径。
    • 当输出为 pdf 文档时,这似乎不起作用
    【解决方案2】:

    我想我找到了解决这个问题的方法,它有点伪解决方案,可以完成任务,但没有解释产生问题的底层机制。

    根据knitr::include_graphics() 文档,path 参数是A character vector of image paths - 强调向量。我们可以在没有magick 的情况下显示.svg 文件,并在示例中的引用中简单地使用以下代码。


    # From example
    paths <- c(
    "/Users/nicholashayden/path/to/my1.svg",
    "/Users/nicholashayden/path/to/my2.svg")
    
    # Solution
    knitr::include_graphics(paths)
    

    这样我们可以避免使用由于某种原因导致此问题的for 循环。但是,这不适用于路径字符串中的~。我的问题是忽略了假设 knitr::include_graphics() 函数中的参数。希望这对将来的任何人都有帮助。

    【讨论】:

    • 我猜~ 是您原来的解决方案不起作用的原因。在我的回答中,我最初忘记了 printinclude_graphics 的调用,因此 for 循环实际上并没有生成图像路径。
    猜你喜欢
    • 2011-12-07
    • 2012-05-25
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多