You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Highcharter柱状图默认Series 1替换为CCAA名称并配置X轴

修改Highcharter柱状图的系列名称与X轴显示

问题描述

使用highcharter绘制柱状图时,希望将默认的“Series 1”替换为数据框中对应的CCAA名称,同时保持X轴显示BANDERAS列的内容。现有数据框df及初始绘图代码如下:

df <-
  structure(
    list(
      CCAA = c(
        "ANDALUCÍA",
        "CEUTA",
        "COMUNITAT VALENCIANA",
        "CASTILLA-LA MANCHA",
        "EXTREMADURA",
        "CASTILLA Y LEÓN"
      ),
      TOTAL = c(27,
                14, 4, 2, 2, 1),
      COLOR = c(
        "#E30613",
        "#E30614",
        "#E30615",
        "#E30616",
        "#E30617",
        "#E30618"
      ),
      BANDERAS = c(
        "FLAG 1",
        "FLAG 2",
        "FLAG 3",
        "FLAG 4",
        "FLAG 5",
        "FLAG 6"
      )
    ),
    class = c("tbl_df", "tbl", "data.frame"),
    row.names = c(NA,-6L)
  )

初始绘图代码:

grafico <- highchart() %>%
    hc_chart(type = 'column') %>%
    hc_tooltip(table=TRUE) %>%
    hc_xAxis(categories = df$BANDERAS) %>%
    hc_colors(color=df$COLOR) %>%
    hc_exporting(enabled = TRUE) %>%
    hc_legend(enabled=FALSE) %>%
    hc_plotOptions(series = list(animation = FALSE)) %>% 
    hc_add_series(df$TOTAL, dataLabels = list(enabled = TRUE, format='<span style="fontfamily: sans-serif">{point.y}</span>'), colorByPoint=TRUE)

解决方案

核心思路是为每个数据点绑定对应的CCAA名称,并自定义tooltip显示内容,同时保留X轴的BANDERAS标识。修改后的代码如下:

# 加载purrr包用于构造数据点列表(未安装先运行install.packages("purrr"))
library(purrr)

grafico <- highchart() %>%
  hc_chart(type = 'column') %>%
  hc_tooltip(
    table = TRUE,
    # 自定义tooltip格式,显示CCAA名称和TOTAL值
    formatter = JS("function() {
      return '<table><thead><tr><th>' + this.point.name + '</th></tr></thead>' +
             '<tbody><tr><td>TOTAL:</td><td>' + this.y + '</td></tr></tbody></table>';
    }")
  ) %>%
  hc_xAxis(categories = df$BANDERAS) %>%
  hc_colors(color = df$COLOR) %>%
  hc_exporting(enabled = TRUE) %>%
  hc_legend(enabled = FALSE) %>%
  hc_plotOptions(series = list(animation = FALSE)) %>%
  hc_add_series(
    # 将每行的TOTAL和CCAA转换为Highcharts点对象
    data = pmap(df, function(CCAA, TOTAL, ...) list(y = TOTAL, name = CCAA)),
    dataLabels = list(enabled = TRUE, format='<span style="font-family: sans-serif">{point.y}</span>'),
    colorByPoint = TRUE
  )

关键改动说明

  • 构造带名称的数据点:使用pmap遍历数据框,为每个点添加name属性(对应CCAA值),替代单一的系列名称。
  • 自定义Tooltip:通过JavaScript formatter函数,让tooltip显示每个点的name(即CCAA),而非默认的“Series 1”。
  • 保留X轴设置:保持hc_xAxis(categories = df$BANDERAS),确保X轴显示BANDERAS列的内容。

如果不想依赖purrr包,也可以用基础R的lapply构造数据列表:

data_list <- lapply(1:nrow(df), function(i) {
  list(y = df$TOTAL[i], name = df$CCAA[i])
})

# 替换hc_add_series中的data参数为data_list即可

内容的提问来源于stack exchange,提问作者R USER MEMBER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:17:09