如何为R语言生成的地图配置更多颜色解决聚类标识重复问题
你当前出现不同聚类同色的问题,根源是仅定义了4种固定颜色,配合%%4取模的赋值逻辑,会让聚类编号大于4的类别自动复用前面的颜色,自然不符合预期。要适配10个以上聚类的场景,可以按以下方式修改颜色分配逻辑:
方案1:使用R内置调色板(无需额外安装依赖)
直接根据实际聚类数量动态生成对应数量的高区分度颜色,无需用取模逻辑复用颜色:
library(googleway) library(geosphere) set_key( "API_KEY" ) swf1<-structure(list(Properties = c(1,2,3,4,5,6), Lat = c(-24.781624,-24.775017,-24.769196,-24.761741,-24.752019,-24.748008), Lon = c(-49.937369,-49.950576,-49.927608,-49.92762,-49.920608,-49.927707)), class="data.frame",row.names = c(NA, -6L)) # 聚类逻辑不变 d<-as.dist(distm(swf1[,2:1])) fit.average<-hclust(d,method="average") clusters<-cutree(fit.average, 5) swf1$cluster<-clusters # 以下是修改的颜色分配逻辑 n_clusters <- max(swf1$cluster) # hcl.colors是R4.0+版本自带的调色板,可通过palette参数更换配色风格 marker_colors <- hcl.colors(n = n_clusters, palette = "Dark 2") # 直接按聚类编号匹配颜色,无需取模 swf1$color <- marker_colors[swf1$cluster] google_map() %>% add_markers( data = swf1, lon = "Lon", lat = "Lat", colour="color")
方案2:使用扩展调色板(适配更多聚类数量)
如果聚类数量超过10种,需要更高区分度的配色,可以使用RColorBrewer包的扩展调色板:
# 首次使用先安装包 # install.packages("RColorBrewer") library(RColorBrewer) library(googleway) library(geosphere) set_key( "API_KEY" ) swf1<-structure(list(Properties = c(1,2,3,4,5,6), Lat = c(-24.781624,-24.775017,-24.769196,-24.761741,-24.752019,-24.748008), Lon = c(-49.937369,-49.950576,-49.927608,-49.92762,-49.920608,-49.927707)), class="data.frame",row.names = c(NA, -6L)) # 聚类逻辑不变 d<-as.dist(distm(swf1[,2:1])) fit.average<-hclust(d,method="average") clusters<-cutree(fit.average, 5) swf1$cluster<-clusters # 颜色分配逻辑 n_clusters <- max(swf1$cluster) # colorRampPalette可以将有限的基础调色板扩展为任意数量的渐变色 marker_colors <- colorRampPalette(brewer.pal(12, "Paired"))(n_clusters) swf1$color <- marker_colors[swf1$cluster] google_map() %>% add_markers( data = swf1, lon = "Lon", lat = "Lat", colour="color")
原问题效果示例:
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

