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

问题描述 投票:114回答:8

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

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

image r markdown knitr pandoc
8个回答
89
投票

您也可以使用png包读取图像,并使用grid.raster包中的grid将其绘制为常规图。

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

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


160
投票

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

Resizing local images

knitr 1.12开始,有include_graphics功能。来自?include_graphics(强调我的):

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

Example:

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

好处:


Including generated images

为了构成在块(但不包括在内)中生成的绘图的路径,块选项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文档中)。


63
投票

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

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

31
投票

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

div标签包装图像

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

使用样式表

test.Rmd

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

## Page with an image {#myImagePage}

![Image](path/to/image)

test.css

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

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


19
投票

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

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

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


6
投票

今天有同样的问题,并且在编织为PDF时需要knitr 1.16的另一个选项(这需要你安装了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


4
投票

knitr :: include_graphics解决方案适用于调整数字的大小,但我无法弄清楚如何使用它来生成并排调整大小的数字。我发现this post对此非常有用。


2
投票

另一个对我有用的选择是使用knitr::include_graphics()的dpi选项,如下所示:

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

...确定(除非你做数学运算)与在块中定义维度相比是试验和错误,但也许它会帮助某人。

© www.soinside.com 2019 - 2024. All rights reserved.