Làm cách nào để đặt kích thước cho hình ảnh cục bộ bằng cách sử dụng đan để đánh dấu?


149

Tôi có một hình ảnh cục bộ mà tôi muốn đưa vào một .Rmdtệp mà sau đó tôi sẽ knitchuyển đổi sang các trang trình bày HTML Pandoc. Mỗi bài đăng này , điều này sẽ chèn hình ảnh địa phương:
![Image Title](path/to/your/image)

Có cách nào để sửa đổi mã này để đặt kích thước hình ảnh không?


5
Để kiểm soát tốt hơn các kích thước, cuối cùng bạn có thể phải sử dụng thẻ HTML img
Marius

5
Nhận xét của second @ Marius: daredfireball.net/projects/markdown/syntax nói "Kể từ khi viết bài này, Markdown không có cú pháp để chỉ định kích thước của hình ảnh; nếu điều này quan trọng với bạn, bạn chỉ cần sử dụng các thẻ <img> HTML thông thường . "
Ben Bolker

12
vấn đề khi sử dụng thẻ HTML là hình ảnh không còn được nhận dạng là tài nguyên bên ngoài bởi quá trình chuyển đổi Rmd, do đó nó sẽ không được đưa vào phiên bản độc lập của HTML được hiển thị.
fabian

Câu trả lời:


101

Bạn cũng có thể đọc hình ảnh bằng cách sử dụng pnggói chẳng hạn và vẽ nó giống như một âm mưu thông thường sử dụng grid.rastertừ gridgói.

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

Với phương pháp này, bạn có toàn quyền kiểm soát kích thước của hình ảnh của bạn.


Cảm ơn bạn, công trình này sử dụng gọn gàng. (Không hoạt động tốt với dzslides, nhưng tôi không tin đó là vấn đề với giải pháp được cung cấp).
Adam Smith

1
Các trích dẫn xung quanh filepath là bắt buộc img <- readPNG("path/to/your/image")nhưng tôi không thể chỉnh sửa giải pháp.
Adam Smith

1
@AdamSmith Tôi vừa sao chép path/to/your/imagecâu hỏi của bạn. Có tên đường dẫn là một chuỗi ,, và bạn cần dấu ngoặc kép để xác định một chuỗi. Hy vọng tôi rõ ràng.
agstudy

1
Bằng cách chạy này trong RStudio, bạn sẽ tạo ra một lề rất lớn cho png được hiển thị.
Paulo E. Cardoso

19
Độc giả tương lai: Câu trả lời này đã lỗi thời .
CL.

190

Câu hỏi đã cũ, nhưng vẫn nhận được rất nhiều sự quan tâm. Khi các câu trả lời hiện có đã lỗi thời, đây là một giải pháp cập nhật hơn:

Thay đổi kích thước hình ảnh địa phương

Kể từ knitr1.12 , có chức năng include_graphics. Từ ?include_graphics(nhấn mạnh của tôi):

Ưu điểm chính của việc sử dụng chức năng này là nó có khả năng di động theo nghĩa là nó hoạt động cho tất cả các định dạng tài liệu knitrhỗ trợ, do đó bạn không cần phải suy nghĩ nếu bạn phải sử dụng, ví dụ, cú pháp LaTeX hoặc Markdown, để nhúng bên ngoài hình ảnh. Các tùy chọn chunk liên quan đến đầu ra đồ họa hoạt động cho các ô R bình thường cũng hoạt động cho các hình ảnh này, chẳng hạn như out.widthout.height.

Thí dụ:

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

Ưu điểm:


Bao gồm các hình ảnh được tạo

Để soạn đường dẫn đến một âm mưu được tạo ra trong một đoạn (nhưng không bao gồm), các tùy chọn khối opts_current$get("fig.path")(thư mục đường dẫn đến hình) cũng như opts_current$get("label")(nhãn của đoạn hiện tại) có thể hữu ích. Ví dụ sau sử dụng fig.pathđể bao gồm hình ảnh thứ hai trong số hai hình ảnh được tạo (nhưng không hiển thị) trong đoạn đầu tiên:

```{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")))
```

Mẫu chung của các đường dẫn hình là [fig.path]/[chunklabel]-[i].[ext], trong đó chunklabelnhãn của đoạn đã tạo ra ô, ilà chỉ mục của ô (trong đoạn này) và extlà phần mở rộng tệp (theo mặc định pngtrong các tài liệu của RMarkdown).


18
Đối với đầu ra pdf, bạn sẽ phải chỉ định các đơn vị cho kích thước hình, ví dụ: out.width='100pt'nếu không, latex sẽ gây ra lỗi về đơn vị đo lường bất hợp pháp.
andybega

4
Cũng hoạt động cho đầu ra MS Word, nhưng out. Thong và out.height không hoạt động
Ben

@andybega Cảm ơn bạn đã bình luận của bạn; Tôi kết hợp nó vào câu trả lời.
CL.

2
bạn có thể muốnr, echo=FALSE, ...
Jameson Quinn

1
@jzadra Vui lòng tạo một câu hỏi mới với mã có thể lặp lại cho vấn đề của bạn. Hiện tại tôi không thể tái tạo vấn đề của bạn (đã sao chép đoạn mã thứ hai nguyên văn sang tệp RMD và được đan thành HTML và Word).
CL.

112

Câu trả lời chưa được cập nhật: knitr 1.17bạn chỉ cần sử dụng

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

chỉnh sửa theo nhận xét từ @jsb

Lưu ý điều này chỉ hoạt động mà không có khoảng trắng, ví dụ {width = 250px} không {width = 250px}


6
Tôi đã thử điều này trong đan 1.16 và nó không hoạt động khi sử dụng ioslides. Tính năng này sau đó đã bị xóa hay là sự cố ioslides?
Bác sĩ Mike

2
Nó cũng không hoạt động với tôi, trên phiên bản mới nhất của tất cả các gói.
slhck

3
Hoạt động cho tôi bằng cách sử dụng đan 1.17. Hãy chắc chắn rằng bạn viết mà không có khoảng trắng, ví dụ như {width=250px}không {width = 250px}.
jsb

2
Làm việc cho tôi, giải pháp dễ nhất cho đến nay.
tàu chiến

Điều này sẽ không làm việc cho tôi sử dụng xaringanvới knitr_1.21.
Lyngbakr

37

Dưới đây là một số tùy chọn giữ tệp độc lập mà không cần quét lại hình ảnh:

Gói hình ảnh trong divthẻ

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

Sử dụng biểu định kiểu

kiểm tra.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ếu bạn có nhiều hơn một hình ảnh, bạn có thể cần phải sử dụng bộ chọn giả thứ n cho tùy chọn thứ hai này.


1
đây là một giải pháp tốt nhưng nó chỉ có thể được sử dụng với đầu ra html! Đầu ra khác sẽ bỏ qua cài đặt
xhudik

Các <div> ... </div>giải pháp có vẻ rất đơn giản. Là gì stylethiết lập lại quy mô một hình ảnh tới một phần trăm cố định, duy trì tỉ lệ?
user101089

Hãy thử sử dụng% thay vì px.
Nick Kennedy

20

Nếu bạn đang chuyển đổi sang HTML, bạn có thể đặt kích thước của hình ảnh bằng cú pháp HTML bằng cách sử dụng:

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

hoặc bất cứ chiều cao và chiều rộng nào bạn muốn cung cấp.


6
vấn đề với giải pháp này là hình ảnh không còn được công nhận là tài nguyên bên ngoài bởi quá trình chuyển đổi Rmd, do đó, nó sẽ không được đưa vào phiên bản độc lập của HTML được hiển thị.
fabian

8

Có cùng một vấn đề ngày hôm nay và tìm thấy một tùy chọn khác knitr 1.16khi đan thành PDF (yêu cầu bạn đã cài đặt pandoc):

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

Phương pháp này có thể yêu cầu bạn thực hiện một chút thử nghiệm và tìm lỗi để tìm kích thước phù hợp với bạn. Nó đặc biệt thuận tiện vì nó làm cho hai hình ảnh cạnh nhau trở thành một quy trình đẹp hơn. Ví dụ:

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

Bạn có thể sáng tạo và xếp một vài trong số chúng cạnh nhau và kích thước chúng khi bạn thấy phù hợp. Xem https://rpub.com/RatherBit/90926 để biết thêm ý tưởng và ví dụ.


2
điều này không hoàn toàn giống như câu trả lời của tôi ở trên?
InspectorSands

2
@hermestrismegistus gần, nhưng tôi đang sử dụng phần trăm chiều rộng thay vì chiều rộng pixel. Tôi thấy tùy chọn này hữu ích vì trong trường hợp cụ thể của tôi, tôi đã đặt nhiều hình ảnh cạnh nhau, hoạt động tốt hơn theo cách này khi tôi đưa ra chiều rộng chính xác
Taylor Pellerin

5

Một tùy chọn khác phù hợp với tôi là chơi với tùy chọn dpi knitr::include_graphics()như thế này:

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

... chắc chắn (trừ khi bạn làm toán) là thử và sai so với xác định kích thước trong khối, nhưng có lẽ nó sẽ giúp được ai đó.


4

Giải pháp đanr :: include_graphics hoạt động tốt để thay đổi kích thước các số liệu, nhưng tôi không thể tìm ra cách sử dụng nó để tạo ra các số liệu thay đổi kích thước song song. Tôi thấy bài viết này hữu ích để làm như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.