如何修改highcharter分组柱状图的图表下方点颜色
解决Highcharter柱状图图例颜色同步问题
我明白你的问题啦——你已经给每个分类的柱子设置了自定义颜色,但图表下方的图例(就是你说的“点颜色”)还是默认配色,没和柱子对应上对吧?这是因为Highcharter里,柱子的单个颜色映射和图例的系列颜色是分开控制的,咱们只需要手动把系列颜色和自定义颜色绑定就行。
解决方案步骤:
- 先整理颜色映射关系:把每个
stat分类对应的颜色做成一个命名向量,这样后续更清晰不易出错:
color_map <- c( abandonne_pro = '#87CEEB', admissible = '#7CFC00', non_recu = '#FF7F50', refuse = '#FF0000', en_cours = '#FFFF00' )
- 修改绘图代码,同步图例颜色:
我们可以用hc_colors()函数,把对应分类的颜色按系列顺序传入,这样图例颜色就会和柱子颜色完全匹配了。完整代码如下:
library(highcharter) library(dplyr) # 你的原始数据 x = structure(list(stat = c("abandonne_pro", "admissible", "admissible", "admissible", "non_recu", "refuse", "refuse", "en_cours", "non_recu"), annee_recep = structure(c(17532, 17532, 17897, 18262, 17897, 17532, 17897, 17897, 17532), class = "Date"), nb_stat = c(4L, 57L, 112L, 1L, 2L, 5L, 5L, 1L, 1L)), row.names = c(NA, -9L), class = "data.frame", .Names = c("stat", "annee_recep", "nb_stat")) # 添加颜色变量(这部分可以保留,也可以用上面的color_map代替) x = x %>% mutate( color = case_when( stat == 'abandonne_pro' ~ '#87CEEB', stat == 'admissible' ~ '#7CFC00', stat == 'non_recu' ~ '#FF7F50', stat == 'refuse' ~ '#FF0000', stat == 'en_cours' ~ '#FFFF00', TRUE ~ '#C0C0C0' ), date = format(annee_recep, format="%Y") ) # 定义颜色映射 color_map <- c( abandonne_pro = '#87CEEB', admissible = '#7CFC00', non_recu = '#FF7F50', refuse = '#FF0000', en_cours = '#FFFF00' ) # 获取数据中唯一的stat分类,确保颜色顺序匹配 unique_stats <- unique(x$stat) custom_colors <- color_map[unique_stats] # 绘图并同步颜色 hchart( x, "column", hcaes(x = annee_recep, y = nb_stat, group = stat, color = color) ) %>% hc_colors(custom_colors) %>% # 关键:添加这行同步图例颜色 hc_plotOptions(column = list(stacking = "normal"), type = "datetime") %>% hc_xAxis(title = list(text = 'Date'), type = 'datetime') %>% hc_yAxis(title = list(text = "Nombre de chantier")) %>% hc_add_theme(hc_theme_gridlight())
为什么原来的代码没生效?
你之前在hcaes()里设置的color = color只是给每个单独的柱子指定了颜色,但Highcharter的图例颜色是由系列(series)的颜色控制的,默认会用内置的配色方案。通过hc_colors()传入我们自定义的颜色,就能把系列颜色和柱子颜色统一起来啦。
内容的提问来源于stack exchange,提问作者Mostafa90
相关产品推荐
相关产品推荐

