2015-09-02 23 views
5

Hızlı soru. RStudio'ya yüklediğim sql sunucusunda bazı verilerim var. Veriler için bir barchart yaptım ve şimdi harita üzerinde bir noktayı çizmek için enlem ve boylam kullanımıyla birlikte kitaplık kütüphanesi kullanıyorum. Kullanıcı noktayı tıkladığında içinde bir barchart göstermek için pop-up kullanmak mümkün olmak istiyorum.Broşür kütüphanesini kullanarak açılır pencereyi çizme

BarChart kodu (belki bu bir sorun çünkü googleVis kütüphanesini kullanıyorum, bu yüzden pop-up'ta kullanıp kullanamayacağımı bilmiyorum. Ama yine de yapabileceğim en uygun çubuk grafik budur ve diğer öneriler yararlı olabilir i grafik arsa için) henüz R kütüphanelerde

Switzerland <- sqlQuery(con, "sql query") 
SwitzerlandChart <- gvisBarChart(Switzerland, options = list(height=200)) 

profesyonel değilim olarak kodudur:

m <- leaflet() %>% 
    addTiles() %>% # Add default OpenStreetMap map tiles 
    addCircles(lng=8.498868, lat=46.9221, popup=paste(plot(SwitzerlandChart))) 

ben bu kodu çalıştırdığınızda benim barplot görüntülemek için bir web sayfasını açar.

m #Prints the graph 

Bu istenilen konumda noktasıyla grafiği yazdırır ama açılan Ayrıca sadece ben açabileceğiniz yerine bana bir web sayfasını göstermektedir: Sonra ben şu çalıştırın.

Pop-bar içindeki barkodu çizebilmek istiyorum lütfen. Birisi burada geç Belki biraz

+0

örnek verileri sağlayın. – vck

+0

select deyim: SELECT farklı bölge + ',' + şehir olarak Konum, count (ülke) olarak [CountVis] DATABASE WHERE Ülke = 'İsviçre' GROUP BY ülke, bölge, şehir. Veriler: Yer-Cenevre, Zürih; CountVis- 1, 15 (Ben bu barchart ne ile arsa. –

cevap

6

faydalı olabilir ancak

Umut çözümdür. addPopups() işlevinin library(leaflet) işlevi, .svg dosyalarını işlemek gibi görünüyor. Bu nedenle, grafiğinizi svg() kullanarak kaydedebilir ve daha sonra readLines() kullanarak tekrar okuyabilirsiniz. İşte library(mapview) kullanarak tekrarlanabilir örnek:

library(lattice) 
library(mapview) 
library(sp) 

data(meuse) 
coordinates(meuse) <- ~x+y 
proj4string(meuse) <- CRS("+init=epsg:28992") 

clr <- rep("grey", length(meuse)) 

fldr <- tempfile() 
dir.create(fldr) 

pop <- lapply(seq(length(meuse)), function(i) { 

    clr[i] <- "red" 
    p <- xyplot(meuse$cadmium ~ meuse$copper, 
       col = clr, pch = 20, alpha = 0.7) 

    svg(filename = paste(fldr, "test.svg", sep = "/"), 
     width = 250 * 0.01334, height = 250 * 0.01334) 
    print(p) 
    dev.off() 

    tst <- paste(readLines(paste(fldr, "test.svg", sep = "/")), collapse = "") 

    return(tst) 

}) 

mapview(meuse, popup = pop, cex = "cadmium") 

Her açılan bir saçılım olduğunu göreceksiniz. Bir leaflet Örneğin gelince, bu göz önünde bulundurun:

durumda
content <- pop[[1]] 
leaflet() %>% addTiles() %>% 
    addPopups(-122.327298, 47.597131, content, 
      options = popupOptions(closeButton = FALSE) 
) 

etkileşimli olması arsa gerekiyorsa, örneğin etkileşimli svg araziler üretebilmektedir library(gridSVG) bir göz olabilir lattice veya ggplot2 çizimler.

GÜNCELLEME: Bunun

library(mapview) şimdi tayin etmiştir işlevsellik:

  • popupGraph: kafes, ggplot2 veya etkileşimli hatmlwidgets bazlı araziler gömmek için.
  • popupImage: Bu, şu anda ile kurulabilir MapView gelişimi sürümünde yalnızca yerel veya uzak (web) görüntüleri

gömmek için:

devtools::install_github("environmentalinformatics-marburg/mapview", ref = "develop" 
+0

popupGraph ve popupTable birleştirmek mümkün mü? Mesela: mapview (meuse, popup = popupGraph (p, type = "svg", width = 3, height = 2.5), popup = popupTable (meuse, z = "kadmiyum")) işe yaramaz.Yukarıdaki tablodan bir görüntü eklemek istiyorum. – MLavoie

+0

Hayır, bu şu anda mevcut olan fonksiyonlardan herhangi biri ile mümkün değildir * mapview * *. Ben. Temelde, bir * '' pop-up işlevleri iki html dizeleri birleştirmek gerekir gerçi mümkün olabileceğini düşünüyorum. – TimSalabim

+0

@MLavoie sadece bunları birbirine yapıştırabilirsiniz çıkıyor 'kitaplığı (mapview) kitaplığı (kafes) poptab = popupTable (bira fabrikası [1,]) popgrph = popupGraph (graphs = lattice :: xyplot (1:10 ~ 10: 1)) tst = yapıştır (popgrph [[1]], poptab [[1]]) mapview (breweries [1,], popup = tst) ' – TimSalabim