markdown에 knitr를 사용하여 로컬 이미지의 크기를 설정하는 방법은 무엇입니까?


149

.Rmd파일 에 포함하려는 로컬 이미지가 있으며를 사용 knit하여 HTML 슬라이드로 변환합니다 Pandoc. 당 이 게시물 이 로컬 이미지를 삽입합니다 :
![Image Title](path/to/your/image)

이 코드를 수정하여 이미지 크기를 설정하는 방법이 있습니까?


5
크기를보다 세밀하게 제어하려면 HTML img 태그
Marius

5
두 번째 @Marius의 의견 : daringfireball.net/projects/markdown/syntax 는 "이 글을 쓰는 시점에서 Markdown에는 이미지의 크기를 지정하는 구문이 없습니다. 이것이 중요한 경우, 일반 HTML <img> 태그를 사용하면됩니다. "
Ben Bolker

12
HTML 태그를 사용하는 문제는 이미지가 더 이상 Rmd 변환 프로세스에 의해 외부 리소스로 인식되지 않으므로 렌더링 된 HTML의 독립형 버전에 포함되지 않는다는 것입니다.
fabians

답변:


101

또한 사용하여 이미지를 읽을 수 있습니다 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)
```

이 방법을 사용하면 이미지 크기를 완전히 제어 할 수 있습니다.


고맙습니다. (dzslides와 잘 작동하지 않지만 제공된 솔루션에 문제가 있다고 생각하지 않습니다).
Adam Smith

1
파일 경로 주위에 따옴표가 필요 img <- readPNG("path/to/your/image")하지만 솔루션을 편집 할 수 없었습니다.
Adam Smith

1
@AdamSmith 나는 path/to/your/image당신의 질문에서 당신을 복사했습니다 . 예, 경로 이름은 문자열이므로 문자열을 정의하려면 따옴표가 필요합니다. 나는 분명하다.
agstudy

1
RStudio에서 이것을 실행하면 렌더링 된 png에 큰 여백이 생깁니다.
Paulo E. Cardoso

19
미래 독자 :이 답변은 구식 입니다.
CL.

190

문제는 오래되었지만 여전히 많은 관심을 받고 있습니다. 기존 답변이 구식이므로 여기에 최신 솔루션이 있습니다.

로컬 이미지 크기 조정

현재 knitr1.12 함수있다 include_graphics. 에서 ?include_graphics(강조 광산) :

이 기능을 사용하는 가장 큰 장점은 knitr지원 하는 모든 문서 형식에서 작동한다는 점에서 이식성이 뛰어나 므로 LaTeX 또는 Markdown 구문 등을 사용하여 외부를 임베드해야하는지 생각할 필요가 없습니다. 영상. 일반 R 플롯에 대한 작업 또한 이러한 이미지에 대한 작동하는지 그래픽 출력에 관련된 청크 옵션 out.widthout.height.

예:

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

장점 :

  • 이상 agastudy의 대답 : 외부 라이브러리 또는 이미지를 재 래스터에 대한 필요가 없습니다.
  • Over Shruti Kapoor의 답변 : 수동으로 HTML을 작성할 필요가 없습니다. 또한 이미지는 자체 포함 파일 버전에 포함됩니다.

생성 된 이미지 포함

청크에서 생성 된 플롯 (포함되지는 않음) 의 경로를 구성하려면 청크 옵션 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 문서)입니다.


18
PDF 출력의 경우, 그림 치수에 대한 단위를 지정해야합니다. 예를 들어 out.width='100pt'라텍스는 잘못된 측정 단위에 대한 오류를 발생시킵니다.
andybega

4
MS Word 출력에서도 작동하지만 out.width 및 out.height가 작동하지 않음
Ben

@andybega 귀하의 의견에 감사드립니다; 나는 그것을 대답에 포함시켰다.
CL.

2
당신은 아마 원하는r, echo=FALSE, ...
제임슨 퀸에게

1
@jzadra 문제에 대한 재현 가능한 코드로 새 질문을 작성하십시오. 현재 문제를 재현 할 수 없습니다 (두 번째 코드 스 니펫을 RMD 파일로 복사하고 HTML과 Word로 편성했습니다).
CL.

112

업데이트되지 않은 답변 : knitr 1.17당신은 단순히 사용할 수 있습니다

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

@jsb의 의견에 따라 편집

공백없이 만 작동합니다 (예 : {width = 250px}가 아닌 {width = 250px}).


6
knitr 1.16에서 이것을 시도했지만 요오드 슬라이드를 사용할 때 작동하지 않았습니다. 이 기능이 제거되었거나 요오드 슬라이드 문제입니까?
Dr. Mike

2
모든 패키지의 최신 버전에서도 작동하지 않습니다.
slhck

3
knitr 1.17을 사용하여 나를 위해 일합니다. 공백없이 작성하십시오 (예 : {width=250px}not) {width = 250px}.
jsb

2
나를 위해 가장 쉬운 솔루션입니다.
군함

xaringanwith를 사용 하면 작동하지 않습니다 knitr_1.21.
Lyngbakr

37

이미지를 다시 만들지 않고 파일을 독립적으로 유지하는 옵션은 다음과 같습니다.

이미지를 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;
}

둘 이상의 이미지가있는 경우이 두 번째 옵션에 n 번째 자식 의사 선택기를 사용해야합니다.


1
이것은 좋은 솔루션이지만 html 출력에만 사용할 수 있습니다! 다른 출력은 설정을 무시합니다
xhudik

<div> ... </div>해결책은 아주 간단 보인다. style가로 세로 비율을 유지하면서 이미지의 비율을 고정 된 비율로 다시 조정하는 설정 은 무엇입니까 ?
user101089

px 대신 %를 사용해보십시오.
Nick Kennedy

20

HTML로 변환하는 경우 다음을 사용하여 HTML 구문을 사용하여 이미지의 크기를 설정할 수 있습니다.

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

또는 높이와 너비를 지정하십시오.


6
이 솔루션의 문제점은 이미지가 더 이상 Rmd 변환 프로세스에 의해 외부 자원으로 인식되지 않으므로 렌더링 된 HTML의 독립형 버전에 포함되지 않는다는 것입니다.
fabians

8

오늘 같은 문제 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
위의 답변과 정확히 같지 않습니까?
InspectorSands

2
@hermestrismegistus가 거의 있지만 픽셀 너비가 아닌 너비의 백분율을 사용하고 있습니다. 특정 경우에 여러 이미지를 나란히 배치했기 때문에이 옵션이 유용하다는 것을 알았습니다. 이는 정확한 너비를 제공했을 때 이렇게하는 것이 더 좋습니다
Taylor Pellerin

5

나를 위해 일한 또 다른 옵션은 다음 knitr::include_graphics()과 같은 dpi 옵션으로 재생하는 것입니다 .

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

... (수학을 수행하지 않는 한) 청크의 차원을 정의하는 것과 비교할 때 시행 착오이지만, 누군가에게 도움이 될 것입니다.


4

knitr :: include_graphics 솔루션은 그림의 크기를 조정하는 데 잘 작동했지만 크기를 조정하여 나란히 그림을 만드는 방법을 알 수 없었습니다. 이 게시물이 그렇게하는 데 유용하다는 것을 알았 습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.