使用highcharter绘制带城市标记的世界地图时国家着色消失问题
解决highcharter添加mappoint后国家着色消失的问题
我使用R语言的highcharter包绘制世界地图,展示调研参与者的来源国家与城市。原本基于0-1刻度的国家着色功能运行正常,但添加mappoint类型的城市标记后,已着色的蓝色国家消失,颜色刻度也变为由城市数据生成,调整代码顺序后问题仍未解决。原代码如下:
library(dplyr) library(maps) library(magrittr) library(highcharter) # 补充原代码遗漏的包加载 # 调用maps包的iso3166数据集并命名为dat dat <- iso3166 # 将变量a3重命名为iso-a3 dat <- rename(dat, "iso-a3" = a3) # 创建需要着色的国家向量 part1X_countries <- c("CHE", "FRA", "USA", "GBR", "CAN", "BRA") dat$part1X <- ifelse(dat$`iso-a3` %in% part1X_countries, 1, 0) # 定义城市地理坐标数据 cities <- data.frame( name = c("St Gallen", "Fort Lauderdale", "Paris", "Nottingham", "Winnipeg", "Chicago", "Leeds", "Montréal", "New Rochelle", "São Paulo", "Saint-Genis-Pouilly", "Canterbury"), lat = c(47.42391, 26.122438, 48.866667, 52.950001, 49.8955, 41.881832, 53.801277, 45.5016889, 40.9232, -23.5489, 46.24356, 51.279999), lon = c(9.37477, -80.137314, 2.333333, -1.150000, -97.1383, -87.623177, -1.548567, -73.567256, -73.7793, -46.6388, 6.02119, 1.080000)) # 绘制世界地图 worldmap <- hcmap( map = "custom/world-highres3", # 高分辨率世界地图 data = dat, # 数据源 value = "part1X", joinBy = "iso-a3", showInLegend = FALSE, # 隐藏图例 download_map_data = TRUE ) %>% hc_add_series( data = cities, type = "mappoint", name = "Cities", colorAxis = FALSE, # 关键参数:不绑定国家着色的颜色轴 color = "#e74c3c" # 给城市标记设置固定颜色,可选 ) %>% hc_title(text = "Representation of participants by country")
问题原因与修正说明
添加mappoint系列时,Highcharts默认会将新系列关联到现有颜色轴,直接覆盖原有的国家着色逻辑。通过colorAxis = FALSE让城市点系列独立于国家着色的颜色轴,即可保留国家的蓝色着色效果,同时避免颜色刻度被城市数据干扰。额外设置color参数可以给城市标记指定固定颜色,让地图上的国家和城市元素区分更清晰。
内容的提问来源于stack exchange,提问作者Pauline PROBOEUF
相关产品推荐
相关产品推荐

