我在圆形标记中使用定义的调色板来显示地图上每个点的类别。 地图上显示的点根据调色板着色,但调色板与我在域中使用的级别不对应。它们的颜色似乎是随机的。
相关位是颜色因子定义和传单图:
library(dplyr)
library(tidyverse)
library(leaflet)
library(sf)
library(shiny)
library(leafpop)
acc<-read.csv('acc.csv')
names(acc) <- tolower(names(acc))
pal <- colorFactor(c("red", "navy", "green"), domain = c("1. Fatal", "2. Serious", "3. Slight"))
acc <- acc %>%
st_as_sf(coords = c("easting", "northing"), crs = 27700) %>% st_transform('+proj=longlat +datum=WGS84') %>%
dplyr::mutate(lon = sf::st_coordinates(.)[,1],
lat = sf::st_coordinates(.)[,2])
output$test <- renderLeaflet({
acc %>%
filter(local_auth %in% input$box_local_auth) %>%
filter(month %in% input$box_month) %>%
filter(year %in% input$box_year) %>%
filter(severity %in% input$box_severity) %>%
leaflet() %>%
addTiles() %>%
addCircleMarkers(
radius = 5,
color = ~pal(severity),
label = acc$severity,
popup=popupTable(popup)) %>%
addPolylines(data = map %>%
filter(LAD23NM %in% input$box_local_auth), color = "blue",fillOpacity = 0)
这些图像显示的颜色不遵循任何逻辑:
它不起作用,因为您在过滤
label = acc$severity
后使用 acc
。但 acc$severity
是未过滤的 acc
的值。
只需将其更改为~severity
即可。
地图上的颜色没有错,但标签错了。
顺便说一句,如果您提供像这样的完全可重现的示例,则更容易获得答案:
library(leaflet)
library(shiny)
library(dplyr)
acc <- data.frame(
id_r = c(1,2,3,4,5,6),
severity = c("1. Fatal", "1. Fatal", "2. Serious", "2. Serious", "3. Slight", "3. Slight"),
lat = c(1,1,1,1,1,1),
long = c(1,2,3,4,5,6)
)
pal <- colorFactor(c("red", "navy", "green"), domain = c("1. Fatal", "2. Serious", "3. Slight"))
ui <- fluidPage(
leafletOutput("test")
)
server <- function(input, output, session) {
output$test <- renderLeaflet({
acc %>%
dplyr::filter(id_r %in% c(3, 4, 5, 6)) %>%
leaflet() %>%
addTiles() %>%
addCircleMarkers(
radius = 5,
color = ~pal(severity),
label = ~severity
)
})
}
shinyApp(ui = ui, server = server)