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

如何用Highcharter(R)调整分组柱状图的轴标签显示

实现Highcharter分组柱状图的双X轴布局

要实现年份标签在图表顶部、底部X轴重复显示种族名称的效果,你可以通过双X轴配置结合分组柱状图的设置来完成,具体步骤如下:

1. 准备示例数据

先构造包含年份、种族和对应数值的数据集(已有数据可跳过此步):

library(highcharter)
library(dplyr)
library(tidyr)

# 长格式数据
df <- tibble(
  year = rep(c(2020, 2021, 2022), each = 4),
  race = rep(c("White", "Black", "Asian", "Hispanic"), 3),
  value = sample(10:50, 12)
)

# 转换为宽格式,方便按种族添加系列
df_wide <- df %>% 
  pivot_wider(names_from = race, values_from = value) %>% 
  arrange(year)

2. 配置双X轴与分组柱状图

核心是设置两个X轴:底部主轴显示种族名称,顶部关联轴显示年份,同时确保同一年份的柱子分组显示:

highchart() %>%
  # 底部主X轴:每个柱子对应一个种族名称
  hc_xAxis(
    categories = rep(c("White", "Black", "Asian", "Hispanic"), n_distinct(df$year)),
    labels = list(style = list(fontSize = "12px")),
    tickmarkPlacement = "on"
  ) %>%
  # 顶部X轴:显示年份,每N个柱子对应一个年份(N为种族数量)
  hc_xAxis(
    opposite = TRUE,
    linkedTo = 0,  # 关联底部主X轴,确保刻度对齐
    categories = unique(df$year),
    tickInterval = 4,  # 这里种族数量是4,所以每4个柱子对应一个年份标签
    labels = list(style = list(fontSize = "12px")),
    tickmarkPlacement = "on"
  ) %>%
  # Y轴配置
  hc_yAxis(title = list(text = "数值")) %>%
  # 添加每个种族的系列数据
  hc_add_series(name = "White", data = df_wide$White) %>%
  hc_add_series(name = "Black", data = df_wide$Black) %>%
  hc_add_series(name = "Asian", data = df_wide$Asian) %>%
  hc_add_series(name = "Hispanic", data = df_wide$Hispanic) %>%
  # 分组柱状图设置
  hc_plotOptions(column = list(
    grouping = TRUE,  # 同一年份的柱子分组聚集
    pointPadding = 0.1,
    borderWidth = 0
  )) %>%
  # 关闭图例(底部已显示种族名称,无需重复)
  hc_legend(enabled = FALSE) %>%
  hc_title(text = "按年份分组的种族数值柱状图")

关键参数说明

  • linkedTo = 0:让顶部X轴与底部主X轴共享刻度位置,保证年份标签精准对应到同一年份的种族柱子组。
  • tickInterval:值等于种族的数量,确保每一组种族柱子上方显示一个年份标签。
  • grouping = TRUE:强制同一年份的柱子聚集在一起,避免分散显示。

如果你的种族数量有变化,只需修改categories中的种族列表、tickInterval的数值即可适配。

内容的提问来源于stack exchange,提问作者DiamondJoe12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:10:19