如何使用knitr为markdown设置本地图像的大小?

Ada*_*ith 126 markdown r image pandoc knitr

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

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

CL.*_*CL. 172

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

调整本地图像的大小

knitr1.12开始,有功能include_graphics.从?include_graphics(强调我的):

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

例:

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

好处:


包括生成的图像

要构成在块(但未包括)中生成的绘图的路径,块选项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")))
```
Run Code Online (Sandbox Code Playgroud)

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

  • 对于pdf输出,您必须指定图形尺寸的单位,例如`out.width ='100pt'`,否则latex会抛出有关非法测量单位的错误. (17认同)
  • 也适用于MS Word输出,但out.width和out.height不起作用 (4认同)
  • 你可能想要`r,echo = FALSE,......` (2认同)

ags*_*udy 91

您也可以使用读取图像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)
```
Run Code Online (Sandbox Code Playgroud)

使用此方法,您可以完全控制图像的大小.

  • 未来的读者:这个答案是[过时的](http://stackoverflow.com/a/36057971/2706569). (15认同)

Ins*_*nds 84

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

![Image Title](path/to/your/image){width=250px}
Run Code Online (Sandbox Code Playgroud)

  • 我在knitr 1.16中试过这个,当使用ioslides时它没有用.此功能是否已被删除或是否是ioslides问题? (5认同)
  • 对于高度和宽度 `{height=640px width=480px}` - 两者之间有一个空格,而不是逗号或其他任何东西。 (5认同)
  • 在所有软件包的最新版本上,这对我也不起作用。 (2认同)
  • 使用knitr 1.17为我工作.确保你写的没有空格,例如`{width = 250px}`not` {width = 250px}`. (2认同)
  • 适合我,最简单的解决方案. (2认同)
  • 这似乎不适用于编织PowerPoint。 (2认同)
  • 这对我使用“xaringan”和“knitr_1.21”不起作用。 (2认同)

Nic*_*edy 35

这里有一些选项可以保持文件自包含而无需重新调整图像:

将图像包裹在div标签中

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

使用样式表

test.Rmd

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

## Page with an image {#myImagePage}

![Image](path/to/image)
Run Code Online (Sandbox Code Playgroud)

test.css

#myImagePage img {
  width: 400px;
  height: 200px;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一个很好的解决方案,但它只能用于 html 输出!其他输出将忽略该设置 (2认同)

Shr*_*oor 19

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

  <img src="path/to/image" height="400px" width="300px" />
Run Code Online (Sandbox Code Playgroud)

或者你想要给出的任何高度和宽度.

  • 此解决方案的问题在于,Rmd转换过程不再将图像识别为外部资源,因此它不会包含在呈现的HTML的独立版本中. (6认同)

Tay*_*rin 7

今天有同样的问题,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.

  • 这与我上面的答案不完全相同吗? (2认同)
  • @hermestrismegistus差不多,但是我使用的是宽度百分比,而不是像素宽度。我发现此选项很有用,因为在我的特殊情况下,我并排放置了多个图像,这种方式的效果比当我给出确切宽度时要好 (2认同)

小智 6

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

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

...与在块中定义维度相比,这肯定(除非您进行数学计算)是反复试验,但也许它会对某人有所帮助。