Maybe a little late but here's a solution. The addPopups()
function in library(leaflet)
seems to be able to handle .svg
files. Therefore, you could simply save your plot using svg()
and then read it again using readLines()
. Here's a reproducible example using 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")
You will see that each popup is a scatterplot. As for a leaflet
example, consider this:
content <- pop[[1]]
leaflet() %>% addTiles() %>%
addPopups(-122.327298, 47.597131, content,
options = popupOptions(closeButton = FALSE)
)
In case you need the plot to be interactive, you could have a look at library(gridSVG)
which is able to produce interactive svg plots from e.g. lattice
or ggplot2
plots.
UPDATE:
library(mapview)
now has designated functionality for this:
popupGraph
: to embed lattice, ggplot2 or interactive hatmlwidgets based plots.
popupImage
: to embed local or remote (web) images
This is currently only available in the development version of mapview which can be installed with:
devtools::install_github("environmentalinformatics-marburg/mapview", ref = "develop"
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…