2016-02-20 25 views
5

Tôi nhận thấy rằng điều này phần lớn đánh bại mục đích sử dụng bản đồ tương tác leaflet, nhưng tôi đang viết một cuốn sách giấy truyền thống và tôi muốn hiển thị cách gói leaflet cho R hoạt động. Tôi đang viết cuốn sách trong LaTeX và hiển thị với knitr. Có cách nào để có một bản đồ leaflet hiển thị dưới dạng hình ảnh raster sao cho nó có thể được đưa vào cuốn sách này không?vẽ các ô tờ rơi dưới dạng raster trong R?

Dưới đây là một ví dụ nhỏ:

library(leaflet) 
map <- leaflet() %>% 
    addTiles() %>% 
    addMarkers(lng = -77.03673, lat = 38.89761) 

Bây giờ nếu tôi cố gắng một đoạn như sau:

<<>>= 
map 
@ 

tôi nhận được lỗi này:

Error in validateCssUnit(sizeInfo$width): "\maxwidth" is not a valid CSS unit 
(e.g., "100%", "400px", "auto") 

Đang cố gắng để tiết kiệm như một PNG không hoạt động:

<<>>= 
png(filename = "test.png") 
map 
dev.off() 
@ 

map không được kế thừa từ ggplot, vì vậy ggsave cũng không hoạt động.

Có cách nào để thực hiện công việc này không?

+0

Giống như 'dygraph',' leaflet' dựa trên 'htmlwidgets'. Theo [câu trả lời này của Yihui] (http://stackoverflow.com/a/31820519/2706569) "bạn không thể sử dụng bất kỳ gói dựa trên htmlwidgets nào trong tài liệu LaTeX". Nhưng đọc các bình luận, quá; có thể có cách giải quyết. –

+0

Điều đó có ý nghĩa - cảm ơn liên kết. Giải pháp tốt nhất mà tôi tìm thấy là kết xuất trong RStudio và sau đó sử dụng tính năng Xuất ... và lưu dưới định dạng PNG. – beanumber

Trả lời

7

Đã có câu hỏi gần đây trên How to save Leaflet in RStudio map as png or jpg file?. Nếu bạn không ngại cài đặt PhantomJS, mã bên dưới sẽ giúp bạn tạo hình ảnh tĩnh từ tờ rơi (hoặc bản đồ xem) bản đồ. Điều duy nhất còn lại để làm là không hiển thị mã số saveWidgetwebshot trong sách của bạn và thay vào đó nhập và hiển thị tệp png được tạo từ đó.

## install 'webshot' package 
library(devtools) 
install_github("wch/webshot") 

## load packages 
library(leaflet) 
library(htmlwidgets) 
library(webshot) 

## create map 
m <- leaflet() %>% 
    addTiles() %>% 
    addMarkers(lng = -77.03673, lat = 38.89761) 

## save html to png 
saveWidget(m, "leaflet_map.html", selfcontained = FALSE) 
webshot("leaflet_map.html", file = "leaflet_map.png", 
     cliprect = "viewport") 

## optionally display image when using knitr 
# p <- knitr::include_graphics("leaflet_map.png") 

Và đây là một số đầu ra LaTeX cho mục đích trình diễn. Nếu có ai quan tâm, tệp nguồn đầy đủ .Rnw có sẵn từ GitHub.

LaTeX

+3

Câu trả lời hay. Bạn có thể thêm 'knitr :: include_graphics (" leaflet_map.png ")', là mã bổ sung duy nhất được yêu cầu để sử dụng cách tiếp cận của bạn trong một tài liệu 'knitr'. –

+0

Bạn là người tuyệt vời. – beanumber

+0

Đó là @CL. Hoặc sử dụng 'includegraphics' (từ ** graphicx **) hoặc các loại tương tự trực tiếp trong mã LaTeX như tôi đã thực hiện trong tệp nguồn được liên kết ở trên. – fdetsch

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