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

如何使用R语言highcharter修改X轴日期显示格式

解决Highcharts X轴日期标签格式化无效的问题

问题原因

你的代码同时设置了categories(传入日期列表)和type = "datetime",Highcharts会优先以分类轴模式渲染X轴,而非时间轴模式。此时labels = list(format = '{value:%b %d}')是针对时间轴的格式化规则,对字符串类型的分类标签不起作用,所以格式化无效。

解决方案

提供两种可行修改方式,任选其一即可:

方式1:提前格式化日期作为分类标签(最简单)

直接将input$Week格式化为"19-May"样式后传入categories,同时可去掉type = "datetime"(无需时间轴逻辑):

修改后的完整代码:

highchart() %>% 
    hc_chart(plotBackgroundColor = "#F5F5F5", type = "column") %>% 
    hc_plotOptions(column = list(dataLabels = list(enabled = FALSE), stacking = "normal")) %>%
    hc_add_series(data = input$`Bank Hol / Audit Cx`, name = "Bank Hol", color = "ivory", pointWidth = 20) %>% 
    hc_add_series(data = input$`Industrial Action Cx`, name = "Strike", color = "#F89880", pointWidth = 20) %>% 
    hc_add_series(data = input$`Non-AOS Capacity Cx`, name = "Type A Cx", color = "#311432", pointWidth = 20) %>% 
    hc_add_series(data = input$`AOS Capacity Cx`, name = "Type B Cx", color = "violet", pointWidth = 20) %>% 
    hc_add_series(data = input$`2023/24 Used`, name = "23/24 Used", color = "limegreen", pointWidth = 20) %>% 
    hc_add_series(data = input$`Capacity Plan`, name = "Plan", type = "line", color = "#980008", lineWidth = 2,
                  marker = list(fillColor = "#FFB6C1", lineWidth = 1, lineColor = NULL, symbol = "circle", radius = 4)) %>% 
    hc_add_series(data = input$`2019/20 Used`, name = "2019/20 Used", type = "line", color = "#818589", lineWidth = 1, dashStyle = "shortdash",
                  marker = list(fillColor = "white", lineWidth = 1, lineColor = NULL, symbol = "circle", radius = 3)) %>% 
    hc_add_series(data = input$`2022/23 Used`, name = "2022/23 Used", type = "line", color = "#205eda", lineWidth = 1, dashStyle = "shortdash",
                  marker = list(fillColor = "#ADD8E6", lineWidth = 1, lineColor = NULL, symbol = "circle", radius = 3)) %>% 
    hc_tooltip(crosshairs = FALSE, backgroundColor = "#F0F0F0", shared = TRUE, table = TRUE, borderWidth = 2) %>% 
    hc_yAxis(title = list(text = "Sessions (4-Hour Units)")) %>% 
    # 核心修改:提前格式化日期,去掉type="datetime"
    hc_xAxis(categories = as.list(format(input$Week, "%d-%b")), 
             title = list(text = "Week Commencing"), 
             labels = list(rotation = 270))

方式2:改用纯时间轴模式(更符合时间序列规范)

如果需要保留时间轴交互逻辑(如缩放、时间范围筛选),可去掉categories,将每个系列的日期作为x值传入,同时设置时间轴格式化规则:

核心修改示例:

highchart() %>% 
    hc_chart(plotBackgroundColor = "#F5F5F5", type = "column") %>% 
    hc_plotOptions(column = list(dataLabels = list(enabled = FALSE), stacking = "normal")) %>%
    # 每个系列修改为包含x(日期)和y(数值)的格式
    hc_add_series(data = list_parse2(data.frame(x = input$Week, y = input$`Bank Hol / Audit Cx`)), 
                  name = "Bank Hol", color = "ivory", pointWidth = 20) %>% 
    hc_add_series(data = list_parse2(data.frame(x = input$Week, y = input$`Industrial Action Cx`)), 
                  name = "Strike", color = "#F89880", pointWidth = 20) %>% 
    # 其余系列按上述格式修改...
    hc_yAxis(title = list(text = "Sessions (4-Hour Units)")) %>% 
    # 设置时间轴和格式化规则
    hc_xAxis(type = "datetime", 
             title = list(text = "Week Commencing"), 
             labels = list(rotation = 270, format = '{value:%d-%b}'))

说明

  • 方式1适合无需时间轴交互的场景,修改成本最低;
  • 方式2适合需要时间轴功能的场景,更符合Highcharts时间序列设计逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:47:02