2015-09-02 25 views
5

Szybkie pytanie. Mam niektóre dane w serwerze sql, które załadowałem do RStudio. Zrobiłem wykresy dla danych i teraz używam biblioteki ulotek z wykorzystaniem szerokości i długości geograficznej, aby narysować punkt na mapie. Chcę móc korzystać z wyskakującego okienka, aby wyświetlić w nim wykres słupkowy, gdy użytkownik kliknie punkt.kreślenie wykresu słupkowego w wyskakującym okienku przy użyciu biblioteki ulotek

Kod BarChart (może to jest problem, ponieważ korzystam z biblioteki googleVis, więc nie jestem pewien, czy mogę go użyć w popupie, ale znowu jest to najbardziej odpowiedni wykres słupkowy, który mogę tworzyć i potrzebować - inne sugestie mogą być pomocne Ponieważ nie jestem specjalistą w bibliotekach R jeszcze)

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

na działce milimetrowym kod jest:

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

Kiedy uruchomić ten kod otwiera stronę internetową, aby zobaczyć barplot. Potem uruchom następujące:

m #Prints the graph 

Drukuje wykres z punktu w wybranym miejscu, ale okienko pokazuje mi stronę internetową, a nie tylko, które również mogę otworzyć.

Chcę być w stanie wykreślić wykres słupkowy wewnątrz pop-upu.

nadzieję, że ktoś może pomóc

+0

Proszę podać przykładowe dane. – vck

+0

Moje polecenie select: SELECT odrębny region + "," + miasto jako Lokalizacja, liczba (kraj) jako [CountVis] Z BAZY DANYCH, GDZIE Kraj = 'Szwajcaria' GROUP Według kraju, regionu, miasta. Dane: Lokalizacja - Genewa, Zurych; CountVis-1, 15 (to jest to, co rysuję wykres słupkowy z. –

Odpowiedz

6

Może trochę późno, ale tu jest rozwiązanie. Funkcja addPopups() w library(leaflet) wydaje się być w stanie obsłużyć pliki .svg. Dlatego możesz po prostu zapisać swój wykres za pomocą svg(), a następnie przeczytać go ponownie za pomocą readLines(). Oto przykład z użyciem library(mapview) powtarzalne:

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

Przekonasz się, że każdy jest popup rozrzutu. Jak na leaflet przykład rozważmy to:

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

W przypadku trzeba fabuły być interaktywny, można rzucić okiem na library(gridSVG) który jest w stanie produkować interaktywne wykresy z svg np lattice lub ggplot2 działek.

UPDATE:

library(mapview) teraz wyznaczyło funkcjonalność to:

  • popupGraph: osadzić kratownica, ggplot2 lub interaktywny hatmlwidgets wykresy oparte.
  • popupImage: osadzić lokalne lub zdalne (internet) obrazów

ta jest obecnie dostępna tylko w wersji rozwojowej MapView, które mogą być zainstalowane z:

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

czy można łączyć popupGraph i popupTable? Na przykład: mapview (meuse, popup = popupGraph (p, type = "svg", width = 3, height = 2.5), popup = popupTable (meuse, z = "kadm")) nie działa Chciałbym dodać obrazek nad tabelą – MLavoie

+0

Nie, nie jest to możliwe z żadną z aktualnie dostępnych funkcji w ** widoku mapy * * Myślę, że to może być możliwe. Zasadniczo trzeba by było połączyć dwa łańcuchy html z funkcjami 'popup *'. – TimSalabim

+0

@MLavoie Okazało się, że można je po prostu wkleić biblioteka 'library (mapview) (krata) poptab = popupTable (browary [1,]) popgrph = popupGraph (wykresy = krata :: xyplot (1:10 ~ 10: 1)) tst = wklej (popgrph [[1]], poptab [[1]]) mapview (browary [1,], popup = tst) ' – TimSalabim