使用leaflet包绘制物种分布地图报错的解决方法咨询
解决Leaflet颜色映射错误的方案
错误原因
你遇到的toPaletteFunc错误,是因为colorFactor()的palette参数传入了整数向量c(1:7),这个函数要求调色板参数必须是颜色值(如颜色名称、十六进制色码)、预定义调色板名称(如RColorBrewer里的调色板),或者生成颜色的函数,不能直接用整数。
修正方法
下面提供几种可行的修正方式,任选其一即可:
方法1:使用预定义调色板(推荐)
借助RColorBrewer包的调色板,这类调色板色彩区分度高,适合分类数据:
# 首次使用需安装包 # install.packages("RColorBrewer") library(RColorBrewer) library(leaflet) # 用Set1调色板(包含9种颜色,足够覆盖7个物种) pal <- colorFactor( palette = "Set1", levels = c("Bottlenose dolphin","Common dolphin","Cuvier's beaked whale", "Long-finned pilot whale","Risso's dolphin","Sperm whale","Striped dolphin") ) # 注意:原代码中纬度列名拼写错误,应为`Start Latitude` leaflet() %>% addProviderTiles("CartoDB") %>% addCircleMarkers( lng = dfsensedsp$`Start Longitude`, lat = dfsensedsp$`Start Latitude`, radius = .2, color = pal(dfsensedsp$Specie) )
方法2:手动指定颜色向量
直接用颜色名称或十六进制色码定义7种不同颜色:
library(leaflet) pal <- colorFactor( palette = c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#FFFF33", "#A65628"), levels = c("Bottlenose dolphin","Common dolphin","Cuvier's beaked whale", "Long-finned pilot whale","Risso's dolphin","Sperm whale","Striped dolphin") ) leaflet() %>% addProviderTiles("CartoDB") %>% addCircleMarkers( lng = dfsensedsp$`Start Longitude`, lat = dfsensedsp$`Start Latitude`, radius = .2, color = pal(dfsensedsp$Specie) )
方法3:用基础函数生成颜色
用rainbow()自动生成7种区分度高的颜色,无需额外包:
library(leaflet) pal <- colorFactor( palette = rainbow(7), levels = c("Bottlenose dolphin","Common dolphin","Cuvier's beaked whale", "Long-finned pilot whale","Risso's dolphin","Sperm whale","Striped dolphin") ) leaflet() %>% addProviderTiles("CartoDB") %>% addCircleMarkers( lng = dfsensedsp$`Start Longitude`, lat = dfsensedsp$`Start Latitude`, radius = .2, color = pal(dfsensedsp$Specie) )
额外注意
原代码中纬度列名拼写错误(Start Latitud少了最后一个e),修正为Start Latitude可避免后续出现找不到列的错误。
内容的提问来源于stack exchange,提问作者PereSabio
相关产品推荐
相关产品推荐

