【发布时间】:2020-12-09 04:56:56
【问题描述】:
我创建了一个 R markdown 报告,其中部分和标签集是动态创建的。
我有一个问题,即在输出中未生成传单地图,而是在空白处生成。然而,它们确实在 R 工作室中渲染。
这是一张图片,显示了输出当前的外观以及它的外观。
这是我尝试过的代码:
{r, echo = FALSE, results='asis', warning=FALSE, message=FALSE}
for (estates in filtered_list){
map_data <- x_estates %>% filter(Street_Postcode == estates)
cat("###", estates, "{.tabset .tabset-fade .tabset-pills}", "\n")
cat("\n\n\n")
cat("This is where the map will go ")
# generate leaflet plot (doesn't even show white space if not stored in tagList)
page <- tagList(
leaflet() %>% addTiles() %>%
addMarkers(map_data$Longitude, map_data$Latitude)
)
### options i've tried for getting the Leaflet map to plot correctly
page
print(page)
print(page[[1]])
page[[1]]
print(
tagList(
page[[1]]
))
print(
tagList(
page
))
### end
cat("\n\n\n")
for (major in Major$Titles) {
cat("####", major, "\n")
cat("\n\n\n")
#####
rest of code
#####
}
}
我认为这与 html 渲染有关,因为我使用 ggmap 工作生成的静态图;但是我希望我的地图是交互式的。
注意地图在 R studio 中渲染得很好,只是在 knitr html 输出中没有。
编辑
按照 Susan Switzer 的建议,我对代码进行了一些更改。现在显示传单图(也具有交互性)。可以更改代码以动态命名和加载正确的 HTML 文件。
m <- leaflet() %>% addTiles() %>%
addMarkers(map_data$Longitude, map_data$Latitude)
library(mapview)
m <- mapshot(m, url = paste0(getwd(), "/map.html"))
# m <- htmltools::includeHTML("map.html") produces an odd output where the entire document becomes a laggy leaflet map
# print(m)
m <- htmltools::tags$iframe(title = "Map", src = "map.html")
print(m)
编辑 2
Waldi 已经解决了使用积分的问题。然而,在使用集群或热图时也会出现同样的问题。例如
library(tidyverse)
library(leaflet)
library(leaflet.extras)
leaflet()
显示具有 3 组坐标的示例的最少代码
long <- as.numeric(c("0.005638", "0.005648", "0.005658"))
lat <- as.numeric(c("51.62879", "51.62889", "51.62879"))
data1 <- data.frame(long, lat)
filtered_list <- 1:3
cat("## Tabs {.tabset .tabset-fade .tabset-pills}", "\n")
for (estates in filtered_list){
cat("###", estates, "\n")
cat("\n\n\n")
cat("This is where the map will go ")
cat("1 ")
# generate leaflet plot (doesn't even show white space if not stored in tagList)
page <- htmltools::tagList(
leaflet() %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addMarkers(lng=data1$long, lat=data1$lat, popup="The birthplace of R")
)
cat(as.character(page))
cat("2 ")
page <- htmltools::tagList(
leaflet() %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addMarkers(lng=data1$long, lat=data1$lat, popup="The birthplace of R", clusterOptions = markerClusterOptions())
)
cat(as.character(page))
cat("3 ")
page <- htmltools::tagList(
leaflet() %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addMarkers(lng=data1$long, lat=data1$lat, popup="The birthplace of R") %>%
addHeatmap(
lng = data1$lat, lat = data1$long,
blur = 20, max = 5, radius = 40
)
)
cat(as.character(page))
cat("4 ")
page <- htmltools::tagList(
leaflet() %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addMarkers(lng=data1$long, lat=data1$lat, popup="The birthplace of R") %>%
addHeatmap(
lng = data1$lat, lat = data1$long,
blur = 20, max = 5, radius = 40
)
)
cat(as.character(page))
}
【问题讨论】:
-
您是否查看过以下内容:stackoverflow.com/questions/31336898/…?我认为这里使用 mapshot 或 webshot 是相关的。
-
我认为这将解决问题。我已经尝试过了,并取得了一些进展。传单地图现在以交互方式显示,尽管都是相同的图。大概是因为我正在覆盖地图 html。将进一步探索这一点。 i.imgur.com/8nKwuRA.png。我已经更新了上面的代码以显示
标签: r leaflet maps r-markdown