2015-09-02 18 views
5

Domanda veloce tutto. Ho alcuni dati in SQL Server che ho caricato in RStudio. Ho creato un diagramma a barre per i dati e ora sto usando la libreria di opuscoli con l'uso di latitudine e longitudine per tracciare un punto sulla mappa. Voglio essere in grado di utilizzare popup per mostrare un barchart in esso quando l'utente fa clic sul punto.tracciare il diagramma a barre nel popup utilizzando la libreria di volantini

Codice BarChart (forse questo è un problema perché sto usando la libreria googleVis, quindi non sono sicuro se posso usare questo nel popup, ma ancora una volta questo è il grafico a barre più appropriato che posso fare e ho bisogno di altri suggerimenti potrebbero essere utili come io non sono un professionista nelle biblioteche R ancora)

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

per la trama grafo il codice è:

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

Quando ho eseguito questo codice si apre una pagina web per visualizzare il mio barplot. Poi ho eseguito il seguente:

m #Prints the graph 

Questa stampa il grafico con il punto nella posizione desiderata, ma il pop-up mi mostra una pagina web, invece, che anche solo io posso aprire.

Voglio essere in grado di tracciare il bargraph all'interno del popup per favore.

La speranza che qualcuno possa aiutare

+0

Si prega di fornire i dati di esempio. – vck

+0

la mia istruzione di selezione è: SELEZIONA regione distinta + ',' + città come Posizione, conta (paese) come [CountVis] FROM DATABASE WHERE Paese = 'Svizzera' GROUP BY paese, regione, città. I dati sono: Location- Ginevra, Zurigo; CountVis- 1, 15 (questo è ciò che traccia il grafico a barre con. –

risposta

6

Forse un po 'in ritardo, ma qui è una soluzione. La funzione addPopups() in library(leaflet) sembra essere in grado di gestire i file .svg. Pertanto, è possibile semplicemente salvare la trama utilizzando svg() e quindi leggerlo di nuovo utilizzando readLines(). Ecco un esempio riproducibile utilizzando library(mapview):

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

vedrete che ogni comparsa è un grafico a dispersione. Per quanto riguarda ad esempio un leaflet, considerare questo:

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

In caso di necessità la trama per essere interattivo, si potrebbe avere uno sguardo a library(gridSVG) che è in grado di produrre interattive trame svg da esempio lattice o ggplot2 grafici.

UPDATE:

library(mapview) funzionalità ora ha designato per questo:

  • popupGraph: per incorporare reticolo, ggplot2 o interattivo hatmlwidgets trame basate.
  • popupImage: Per incorporare (internet) le immagini locali o remoti

questo è attualmente disponibile solo nella versione di sviluppo di mapview che può essere installato con:

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

è possibile combinare popupGraph e popupTable? Ad esempio: mapview (meuse, popup = popupGraph (p, type = "svg", width = 3, height = 2.5), popup = popupTable (meuse, z = "cadmio")) non funziona. Vorrei aggiungere un'immagine sopra al tavolo – MLavoie

+0

No, questo non è possibile con nessuna delle funzioni attualmente disponibili in ** mapview * * Penso che potrebbe essere possibile però Fondamentalmente, sarebbe necessario combinare le due stringhe html dalle funzioni 'popup *' – TimSalabim

+0

@MLavoie Risulta che è possibile incollarle insieme 'library (mapview) library (reticolo) poptab = popupTable (birrerie [1,]) popgrph = popupGraph (grafici = reticolo :: xyplot (1:10 ~ 10: 1)) tst = paste (popgrph [[1]], poptab [[1]]) mapview (birrerie [1,], popup = tst) ' – TimSalabim