R语言Highcharter地图中缺失值Tooltip的nullFormat无效问题
解决Highcharter地图缺失值Tooltip提示无效的问题
问题原因
Highcharter中,hc_tooltip()的nullFormat参数并未像dataLabels里的同名参数那样实现自动识别缺失值的逻辑,直接设置不会生效,需要自定义tooltip的格式化逻辑来处理NA值。
解决方案
通过formatter参数自定义tooltip内容,判断数据点的value是否为缺失值,分别返回对应的提示文本。修改后的完整代码如下:
require(dplyr) require(highcharter) mapdata <- get_data_from_map(download_map_data("custom/usa-and-canada")) data_fake <- mapdata |> select(code = `hc-a2`) |> mutate(value = 1e5 * abs(rt(nrow(mapdata), df = 10))) # 设置AZ区域为缺失值 data_fake$value[data_fake$code == "AZ"] <- NA highchart(type = "map") |> hc_chart(map = download_map_data("custom/usa-and-canada")) |> hc_add_series( data_fake , joinBy = c("hc-a2", "code") , name = "Fake data" , dataLabels = list(enabled = TRUE, format = "{point.name}", nullFormat = "N/A") ) |> hc_colorAxis(auxpar = NULL) |> hc_tooltip( valueDecimals = 0, # 自定义格式化函数处理缺失值 formatter = JS("function() { if (this.point.value === null) { return '<b>' + this.point.name + '</b><br/>Fake data: Missing data'; } else { return '<b>' + this.point.name + '</b><br/>Fake data: ' + Highcharts.numberFormat(this.point.value, this.options.valueDecimals); } }") )
代码说明
- 用
JS()包裹JavaScript格式化函数,直接调用Highcharts原生的tooltip处理逻辑 - 判断
this.point.value是否为null(Highcharter会自动将R中的NA转换为JavaScript的null) - 缺失值时返回自定义的"Missing data"提示,非缺失值时保留原有的数值格式化规则(通过
Highcharts.numberFormat处理小数位数)
内容的提问来源于stack exchange,提问作者Roelof Waaijman
相关产品推荐
相关产品推荐

