170

我有一个本地图像,我想将其包含在一个.Rmd文件中,然后knit将其转换为带有Pandoc. 根据这篇文章,这将插入本地图像:
![Image Title](path/to/your/image)

有没有办法修改此代码以设置图像大小?

4

8 回答 8

211

这个问题很老,但仍然受到很多关注。由于现有答案已经过时,这里有一个更新的解决方案:

调整本地图像大小

knitr1.12开始,就有了这个功能include_graphics。来自?include_graphics(强调我的):

使用此功能的主要优点是它是可移植的,因为它适用于所有knitr支持的文档格式,因此您无需考虑是否必须使用例如 LaTeX 或 Markdown 语法来嵌入外部图片。适用于普通 R 绘图的与图形输出相关的块选项也适用于这些图像,例如out.widthout.height

例子:

```{r, out.width = "400px"}
knitr::include_graphics("path/to/image.png")
```

优点:


包括生成的图像

要组成在块中生成的图的路径(但不包括在内),块选项opts_current$get("fig.path")(图目录的路径)以及opts_current$get("label")(当前块的标签)可能很有用。以下示例用于fig.path包含在第一个块中生成(但未显示)的两个图像中的第二个:

```{r generate_figures, fig.show = "hide"}
library(knitr)
plot(1:10, col = "green")
plot(1:10, col = "red")
```

```{r}
include_graphics(sprintf("%sgenerate_figures-2.png", opts_current$get("fig.path")))
```

图形路径的一般模式是[fig.path]/[chunklabel]-[i].[ext],其中chunklabel是生成绘图的块的标签,i是绘图索引(在此块内),ext是文件扩展名(默认情况下png在 RMarkdown 文档中)。

于 2016-03-17T10:34:57.590 回答
138

未更新的答案:knitr 1.17您可以简单地使用

![Image Title](path/to/your/image){width=250px}

根据@jsb 的评论进行编辑

请注意,这仅适用于没有空格,例如 {width=250px} 而不是 {width = 250px}

于 2017-08-29T19:19:02.907 回答
108

例如,您还可以使用包读取图像,并像使用包png中的常规绘图一样绘制它。grid.rastergrid

```{r fig.width=1, fig.height=10,echo=FALSE}
library(png)
library(grid)
img <- readPNG("path/to/your/image")
 grid.raster(img)
```

使用这种方法,您可以完全控制图像的大小。

于 2013-03-25T22:51:16.293 回答
38

以下是一些保持文件自包含而不重新制作图像的选项:

将图像包装在div标签中

<div style="width:300px; height:200px">
![Image](path/to/image)
</div>

使用样式表

测试.Rmd

---
title: test
output: html_document
css: test.css
---

## Page with an image {#myImagePage}

![Image](path/to/image)

测试.css

#myImagePage img {
  width: 400px;
  height: 200px;
}

如果您有多个图像,则可能需要为第二个选项使用 nth-child 伪选择器。

于 2015-06-27T07:35:56.927 回答
21

如果要转换为 HTML,则可以使用 HTML 语法设置图像的大小,方法是:

  <img src="path/to/image" height="400px" width="300px" />

或您想要给出的任何高度和宽度。

于 2013-03-28T17:54:04.690 回答
9

今天遇到了同样的问题,并knitr 1.16在编织到 PDF 时找到了另一个选项(这需要您安装 pandoc):

![Image Title](path/to/your/image){width=70%}

此方法可能需要您进行一些反复试验才能找到适合您的尺寸。它特别方便,因为它使将两个图像并排放置一个更漂亮的过程。例如:

![Image 1](path/to/image1){width=70%}![Image 2](path/to/image2){width=30%}

您可以发挥创意,将其中的几个并排堆叠,并根据需要调整它们的大小。有关更多想法和示例,请参阅https://rpubs.com/RatherBit/90926

于 2017-12-08T08:29:27.347 回答
7

另一个对我有用的选项是使用这样的 dpi 选项knitr::include_graphics()

```{r}
knitr::include_graphics("path/to/image.png", dpi = 100)
```

...与在块中定义尺寸相比,这肯定(除非你做数学)是反复试验,但也许它会对某人有所帮助。

于 2018-04-20T21:28:42.710 回答
4

knitr::include_graphics 解决方案在调整图形大小方面效果很好,但我无法弄清楚如何使用它来生成并排调整大小的图形。我发现这篇文章对这样做很有用。

于 2016-10-16T03:46:34.700 回答