Листы карты листовок не видны в презентации.
Вступление:
Я пытаюсь встроить карту листовки в презентацию revejs в файле RMarkdown. Мой пример ниже довольно близок, но это (1) недостающие плитки, (2) всплывающие окна не отображаются, и (3) легенда и шрифт слишком большие!
Я не слишком обеспокоен тем, как выглядят блоки кода на данный момент. Я планирую использовать results = "hide"
опция слайд для моего конечного продукта.
Заранее спасибо!
Воспроизводимый пример:
---
title: "My Presentation"
author: Me
date: 2017-06-23
output:
revealjs::revealjs_presentation:
theme: black
---
## Loading in necessary packages:
```{r}
library(dplyr)
library(sp)
library(rgdal)
library(rgeos)
library(RColorBrewer)
library(classInt)
library(leaflet)
library(htmlwidgets)
```
## Defining our data:
```{r}
lat <- c(45.51158000, 45.50431159, 45.496539)
lon <- c(-122.548056, -122.54775, -122.54788)
no2 <- c(17.37, 25.61, 24.69)
dta <- data.frame(lat, lon, no2)
colnames(dta) <- c("lat","lon","no2")
```
## Create layer of spatial points:
```{r}
points <- SpatialPointsDataFrame(data.frame(x=dta$lon, y=dta$lat), data = data.frame(dta$no2))
plotclr <- (brewer.pal(7, "RdYlGn"))
class <- classIntervals(dta$no2, n = 7, style = "fixed", fixedBreaks = c(0,5,10,15,20,25,30))
colcode <- findColours(class, rev(plotclr))
plot(points, col=colcode, pch=19)
pop1<-paste0("<b>NO2:</b> ", dta$no2, " ppb",
"<br /> <b>Lat:</b> ", dta$lat,
"<br /> <b>Lon:</b> ", dta$lon)
```
## Creating the leaflet map:
```{r}
no2_map <-leaflet()%>%
addTiles('http://{s}.tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png') %>%
addCircleMarkers(data=points, color = "black", radius = dta$no2, fillColor = colcode, fillOpacity=0.7, weight=1, popup=pop1) %>%
addLegend(position = "bottomright", colors = rev(plotclr), labels = rev(c("30","25","20","15","10","5","0")), opacity = 0.9, title = "NO2 (ppb)")
```
---
```{r}
no2_map
saveWidget(no2_map, file="map.html")
```
1 ответ
К сожалению, reve.js и Leaflet не очень хорошо играют вместе, и на слайде с вашими картами могут отсутствовать слои. Это связано с тем, что Leaflet не может определить размер элемента DOM, который служит контейнером для карты, так каккартист файла manif.js динамически изменяет размеры всех элементов.
Самый простой обходной путь - просто обновить страницу, когда вы находитесь на слайде с картой Leaflet. Вы также можете попробовать отложенный вызов map.invalidateSize()
(используя setTimeout()
в простом Javascript)