2013-09-26 62 views
9

Có thể tạo mã ra tạo lô hai phiên bản của cùng một hình, ở các kích cỡ khác nhau, từ tài liệu .Rmd không? Hoặc thông qua các tùy chọn đoạn (Tôi không thấy bất cứ điều gì hoạt động trực tiếp tại đây), hoặc thông qua một móc tùy chỉnh knitr? Tốt hơn là điều này sẽ được thực hiện với thiết bị png.Tạo hai ô từ cùng một đoạn/tuyên bố trong knitr

Động lực của tôi: Tôi muốn có thể xuất hình ở một kích thước phù hợp với tài liệu HTML được biên dịch và một hình khác mà người dùng có thể hiển thị sau khi nhấp (nghĩ fancybox). Tôi nghĩ rằng tôi sẽ có thể xử lý kịch bản cần thiết để thực hiện công việc đó; tuy nhiên, trước tiên tôi cần thuyết phục R/knitr xuất hai phiên bản của hình.

Mặc dù tôi chắc chắn có cách giải quyết, nhưng sẽ tốt nhất nếu có cách nào đó để làm cho nó 'hoạt động' sau hậu trường, ví dụ: qua móc knitr. Bằng cách đó, chúng tôi không phải làm bất cứ điều gì đặc biệt với mã R trong một đoạn, chúng tôi chỉ sửa đổi cách chúng tôi phân tích/đánh giá đoạn đó. Ngoài ra, người ta có thể sử dụng đồ họa SVG có quy mô độc đáo, nhưng sau đó chúng tôi mất suy luận tốt về kích thước tốt cho nhãn âm mưu, và đồ họa véc-tơ không tuyệt vời cho các ô có nhiều điểm.

Trả lời

13

Tôi nghĩ rằng không có giải pháp, và chuẩn bị nói không với @baptiste, nhưng có hack trong tâm trí của tôi sớm. Dưới đây là một ví dụ R Markdown:

```{r test, dev='png', fig.ext=c('png', 'large.png'), fig.height=c(4, 10), fig.width=c(4, 10)} 
library(ggplot2) 
qplot(speed, dist, data=cars) 
``` 

See the [original plot](figure/test.png) and 
a [larger version](figure/test.large.png). 

Lý do tôi nghĩ rằng phiên bản vectorized của dev sẽ không làm việc là: cho dev=c('png', 'png'), file png thứ hai sẽ ghi đè lên một trong những đầu tiên bởi vì con số tên tập tin là như nhau. Sau đó, tôi nhận ra fig.ext cũng đã được vector hóa và tiện ích mở rộng tệp như large.png không thực sự phá hủy phần mở rộng tệp png; đây là lý do tại sao nó là một hack.

Dù sao, theo phiên bản vectơ của dev, fig.ext, fig.heightfig.width, bạn có thể lưu cùng một lô với nhiều phiên bản. Nếu bạn sử dụng một mẫu xác định cho phần mở rộng tệp hình, tôi nghĩ bạn cũng có thể nấu một số mã JavaScript để tự động đính kèm các hộp ưa thích vào hình ảnh.

+0

Hoàn hảo! Cảm ơn Yihui! –

0

Nếu bạn chỉ cần con số nhỏ và lớn, bạn có thể chỉ cần làm:

<<plotSmall, fig.height=6, fig.width=8, out.width='.1\\textwidth'>>= 
plot(...) 
@ 
<<plotBig, fig.height=6, fig.width=8, out.width='.99\\textwidth'>>= 
plot(...) 
@ 

Hoặc đơn giản hơn:

<<plotBoth, fig.height=6, fig.width=8, out.width=c('.1\\textwidth', '.9\\textwidth')>>= 
plot(...) 
plot(...) 
@ 

(chắc chắn rằng bạn biết điều này, nhưng .Rmd là dành cho LaTeX, trong khi .Rhtml là dành cho html - cú pháp .Rhtml hơi khác.)

Các vấn đề liên quan