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

Highcharter条件轴格式化:Shiny仪表盘动态显示Y轴货币前缀

解决Shiny中Highcharter Y轴动态显示货币前缀的方案

核心思路

通过Highcharter的hc_yAxis(labels = list(formatter = JS(...)))结合Shiny的输入值,动态生成JavaScript格式化函数,让Y轴数值自动添加当前选中的货币前缀。

完整示例代码

首先定义示例销售数据:

sales_data <- data.frame(
  product = c("A", "B", "C", "D"),
  EUR = c(1200, 850, 1500, 900),
  GBP = c(1000, 720, 1280, 760)
)

然后是完整的Shiny应用代码:

library(shiny)
library(highcharter)

ui <- fluidPage(
  selectInput("currency", "选择货币:", choices = c("EUR", "GBP")),
  highchartOutput("sales_chart")
)

server <- function(input, output) {
  output$sales_chart <- renderHighchart({
    # 动态获取选中的货币列
    selected_currency <- input$currency
    chart_data <- sales_data %>% 
      select(product, !!sym(selected_currency)) %>% 
      rename(value = !!sym(selected_currency))
    
    highchart() %>%
      hc_xAxis(categories = chart_data$product) %>%
      # 重点:动态生成Y轴标签格式化逻辑
      hc_yAxis(labels = list(
        formatter = JS(paste0("function() { return '", selected_currency, " ' + this.value; }"))
      )) %>%
      hc_series(list(
        name = paste("销售额", selected_currency),
        data = chart_data$value,
        type = "column"
      )) %>%
      # 同步Tooltip的动态货币显示
      hc_tooltip(
        formatter = JS(paste0("function() { return '<b>' + this.x + '</b><br/>销售额: ", selected_currency, " ' + this.y; }"))
      )
  })
}

shinyApp(ui, server)

关键细节说明

  • 动态Y轴格式化:通过JS(paste0(...))将Shiny输入的selected_currency嵌入到JavaScript函数中,实现Y轴数值与所选货币的绑定。
  • 响应式数据匹配:用!!sym(selected_currency)动态提取对应货币的销售数据,确保图表数据与货币选择同步。
  • Tooltip一致性:保持Tooltip的动态逻辑与Y轴格式统一,避免显示不一致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:57:16