如何用R的Highcharter包创建指定样式的Solidgauge仪表盘图表?
调整Highcharts仪表盘代码实现目标样式
需要实现一个半圆环形的双分段仪表盘,分别展示Hombre(46.7)和Mujer(53.3)两个类别的占比,对应示例中的分段颜色布局。
所用数据集
df <- structure(list(Genero = c("Hombre", "Mujer"), Media = c(46.7, 53.3)), row.names = c(NA, -2L), class = c("etable", "data.frame"))
尝试的代码
stops <- list_parse2(df) highchart() %>% hc_chart(type = 'solidgauge') %>% hc_pane( startAngle = -90, endAngle = 90, background = list( outerRadius = '100%', innerRadius = '60%', shape = 'arc' ) ) %>% hc_yAxis( stops = stops, lineWidth = 0, minorTickWidth = 0, tickAmount = 2, min = 0, max = 100, labels = list(y = 25) ) %>% hc_add_series( data = df$Media, color = '#EB6909' ) %>% hc_exporting(enabled = TRUE) %>% hc_plotOptions(series = list(animation = FALSE))
代码调整方案
修正颜色分段映射逻辑:
yAxis的stops参数需要的是「颜色-数值区间」的映射列表,不能直接解析原始数据集。需要手动构建对应分段的颜色映射:# 替换为示例图对应的颜色,比如Hombre用蓝色、Mujer用粉色 stops <- list( list(color = '#4A90E2', value = 0), list(color = '#4A90E2', value = 46.7), list(color = '#E94E77', value = 46.7), list(color = '#E94E77', value = 100) )调整系列数据配置:solidgauge需要填充整个仪表盘范围,依靠
stops来显示分段颜色,而非直接传入两个数值。修改系列数据部分:hc_add_series( data = list(100), # 填充0-100的完整范围 colorByPoint = TRUE )添加类别标签与数值展示:如果需要在仪表盘上显示类别名称和对应数值,可以通过数据标签实现:
hc_add_series( data = list(100), colorByPoint = TRUE, dataLabels = list( enabled = TRUE, format = '<div style="text-align:center">{point.name}<br>{point.y}%</div>', y = -20 ) ) %>% hc_series( list(name = 'Hombre', y = 46.7), list(name = 'Mujer', y = 53.3) )优化细节匹配示例:如果示例图有刻度标签或额外样式,可以调整
hc_yAxis的tickPositions或labels参数,比如设置tickPositions = c(0, 46.7, 100)来显示分段刻度。
内容的提问来源于stack exchange,提问作者R USER MEMBER
相关产品推荐
相关产品推荐

