2016-02-20 10 views
5

Bunun bir interaktif leaflet haritayı kullanmanın amacını büyük ölçüde bozduğunu biliyorum, ancak geleneksel bir kitap yazdım ve R için leaflet paketinin nasıl çalıştığını göstermek istiyorum. Kitabı LaTeX'te yazıyorum ve knitr ile render ediyorum. leaflet haritasının, bu kitaba eklenebilecek şekilde raster görüntü olarak oluşturulmasının bir yolu var mı? Bu hatayı alıyorumBroşürü R?

<<>>= 
map 
@ 

:

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

bir PNG olarak kaydetmek çalışıyorum ben böyle bir yığın deneyin Şimdi eğer

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

: Burada

minimal örnektir çalışmaz:

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

map, ggplot'dan devralmaz, bu nedenle ggsave çalışmaz.

Bu işi yapmanın bir yolu var mı?

+0

. [Bu cevap Yihui'ye göre] (http://stackoverflow.com/a/31820519/2706569) "LaTeX belgelerinde htmlwidgets tabanlı paketleri kullanamazsınız". Ama yorumları da okuyun; geçici çözümler olabilir. –

+0

Bu mantıklı - bağlantı için teşekkürler. Bulduğum en iyi çözüm, RStudio'da işlemek ve sonra Ver ... özelliğini kullanıp PNG olarak kaydetmektir. – beanumber

cevap

7

How to save Leaflet in RStudio map as png or jpg file? hakkında yeni bir soru soruldu. PhantomJS'u yüklemeyi önemsemiyorsanız, aşağıdaki kod broşürü (veya mapview) haritalarından statik görüntüler oluşturmanıza yardımcı olacaktır. O zaman yapılabilecek tek şey kitabınızda saveWidget ve webshot kodunu göstermemek ve bunun yerine oradan oluşturulan png dosyasını içe aktarmak ve görüntülemek.

## 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") 

Ve burada gösteri amaçlı bazı LaTeX çıktıları. Herhangi biri ilgilenirse, eksiksiz .Rnw kaynak dosyası GitHub'dan edinilebilir. htmlwidgets` `dayanmaktadır leaflet`` dygraph`, `gibi

LaTeX

+3

Harika cevap. Knitr :: include_graphics ("leaflet_map.png") 'ifadesini ekleyebilir, ki bu da yaklaşımınızı' knitr 'belgesinde kullanmanız için gereken tek ek koddur. –

+0

Sizler harikasınız. – beanumber

+0

Bu, burası @CL. Veya yukarıda bağlı kaynak dosyada yaptığım gibi 'includegraphics' (** graphicx ** 'den) veya benzerlerini doğrudan LaTeX kodunda kullanın. – fdetsch