r - 编辑 tmap/leaflet/shiny 的默认值(弹出窗口和图块)
问题描述
我正在使用 tmap、传单和闪亮创建巴斯克地区(西班牙)的交互式地图。我已经能够创建地图,但我无法编辑 renderLeaflet 的默认行为,特别是:
我想编辑默认标签和弹出窗口。理想情况下,我不想要弹出窗口(点击时),只有标签(鼠标悬停时);标签将包含当前显示在弹出窗口中的信息,以及一些附加信息,并显示在地图的右上角而不是该区域(类似于https://leafletjs.com/examples/choropleth/)
我想删除传单图块,以便只显示 Esri.WorldGrayCanvas,因此,应该没有在图块之间切换的选项。
以下代码显示了我在说什么。所需的形状文件可在此处下载 ftp://ftp.geo.euskadi.net/cartografia/Limites/或此处https://www.dropbox.com/s/zx3bg5131pomyfy/CB_COMARCAS_5000_ETRS89.shp?dl=0
library(shiny)
library(shinyWidgets)
library(leaflet)
library(rgdal)
library(tmap)
library(tmaptools)
library(dplyr)
setwd(~)
shape <- read_shape(file="CB_COMARCAS_5000_ETRS89.shp") # Load shape file
shape$COMARCA <- as.character(shape$COMARCA)
shape$COMARCA <- c(# Vector with names of the areas
"Alto Deba", "Arratia-Nervión", "Bajo Bidasoa", "Bajo Deba", "Cantábrica Alavesa",
"Donostialdea", "Duranguesado", "Encartaciones", "Estribaciones del Gorbea",
"Gernika-Bermeo", "Goierri", "Gran Bilbao", "Llanada Alavesa", "Markina-Ondarroa",
"Montaña Alavesa", "Plentzia-Mungia", "Rioja Alavesa", "Tolosa", "Urola Costa", "Valles Alaveses")
datawvals$COMARCA <- c(# Vector with names of the areas
"Alto Deba", "Arratia-Nervión", "Bajo Bidasoa", "Bajo Deba", "Cantábrica Alavesa",
"Donostialdea", "Duranguesado", "Encartaciones", "Estribaciones del Gorbea",
"Gernika-Bermeo", "Goierri", "Gran Bilbao", "Llanada Alavesa", "Markina-Ondarroa",
"Montaña Alavesa", "Plentzia-Mungia", "Rioja Alavesa", "Tolosa", "Urola Costa", "Valles Alaveses")
datawvals <- bind_rows(datawvals, datawvals, datawvals)
datawvals$time <- c(rep("2010",20), rep("2014",20), rep("2016",20))
datawvals$var1 <- runif(60)
datawvals$var2 <- runif(60)
datawvals$var3 <- runif(60)
data4map <- left_join(shape, datawvals, by="COMARCA") #join shape with data to be depicted
years <- c(2010,2014,2016)
runApp(list(
ui = fluidPage(
titlePanel("Shiny tmap!"),
sidebarLayout(
sidebarPanel(
selectInput("var", label = "Variable", choices = c("var1", "var2", "var3"), selected = "var1"),
sliderTextInput(
inputId = "time", label = "year",
choices = years, selected = 2010,
grid = FALSE
)
),
mainPanel(
leafletOutput("map", width=600)
)
)
),
server = function(input, output) {
#Subset data based on year
subsetData <- reactive({
new_data <- data4map[data4map$time==input$time, ]
return(new_data)
})
#Different color palettes for diff vars
colores <- reactive({
if(input$var=="var1"){
colores0 <- "Blues"
} else{
colores0 <- "Reds"
}
return(colores0)
})
#Actual plot
output$map = renderLeaflet({
tm <- tm_shape(subsetData()) +
tm_polygons(input$var, palette=colores())
tmap_leaflet(tm)
})
}
))
提前感谢有关如何编辑这些默认值的任何提示和建议。
解决方案
你需要使用tmap
吗?我认为你可以得到你想要的行为leaflet
- 看看这里的指南:
https ://rstudio.github.io/leaflet/choropleths.html
一个可行的结构是:
output$map <- renderLeaflet({
leaflet() %>%
addProviderTiles("ESRI.WorldGrayCanvas") %>%
addPolygons(data = subset_data(), ...) %>%
addLegend(position = "topright", ...) # Using ... here to mean more stuff needed!
})
color
然后,您可以通过将fill
参数传递给addPolygons
;来更改形状的颜色。popup
您可以分别使用和label
参数更改弹出窗口和标签。
在图例(以及多边形颜色)中,您需要提供调色板和值
所有详细信息都在上面的链接上 - 它与您提供的leafletjs 链接中的 choropleth 相同,但使用 R 构建。
推荐阅读
- html - 在 WordPress 桌面视图中使用菜单栏
- java - 为什么 ArrayList.class.isInstance(ArrayList.class) 返回 false?
- c++ - 这是初始化可变大小数组的正确方法吗
- android - Swift:WKWebView 添加类似 Android 的 javascript 界面
- amazon-web-services - AWS 是否对主数据库和只读数据库之间的连接进行负载平衡
- vba - 如何按百分比拆分字符串
- python - Pandas - 在没有 iterrtuples() 的情况下矢量化/提高功能效率
- python - Pandas - 如何将带空格的字符串转换为时间戳?
- sqlite - GORM 关联 .Create()
- java - 对优先队列中的这条线感到困惑