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
相关产品推荐
相关产品推荐

