使用 apexcharter 的 R 中的交互式热图在反应性方面失败

Interactive heatmap in R using apexcharter fails at reactivity

目前我尝试使用 apexcharter 在 R 中创建交互式热图。这在手动创建图表时效果很好,但在闪亮的交互式使用中失败。

library(shiny)
library(tidyverse)
library(apexcharter)

# Define UI for application that draws a histogram
ui <- fluidPage(
    
    # Application title
    titlePanel("Test Heatmap"),
    
    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            selectInput(
                inputId = "heatmap_filter",
                label = "heatmap filter",
                choices = c(1999, 2008),
                selected = 2008
            )
        ),
        mainPanel(
            apexchartOutput("heatmap")
        )
    )
)

        
# Define server logic required to draw a histogram
server <- function(input, output) {
    
    output$heatmap <- renderApexchart({

        df <- mpg %>% filter(year == input$heatmap_filter) %>% mutate_if(is.character, as.factor) %>% group_by(manufacturer, class) %>% summarise(cnt = n()) %>% tidyr::complete(class, fill = list(cnt = 0)) 
        
        q20 <-   round(as.numeric(quantile(df %>% filter(cnt>0) %>% pull(cnt), probs = seq(0,1,0.2), na.rm = TRUE))[2],0)
        q40 <-   round(as.numeric(quantile(df %>% filter(cnt>0) %>% pull(cnt), probs = seq(0,1,0.2), na.rm = TRUE))[3],0)
        q60 <-   round(as.numeric(quantile(df %>% filter(cnt>0) %>% pull(cnt), probs = seq(0,1,0.2), na.rm = TRUE))[4],0)
        q80 <-   round(as.numeric(quantile(df %>% filter(cnt>0) %>% pull(cnt), probs = seq(0,1,0.2), na.rm = TRUE))[5],0)
        
        apex(
            data = df,
            type = "heatmap", 
            mapping = aes(x = manufacturer, y = class, fill = cnt)
        ) %>% 
            ax_dataLabels(enabled = TRUE) %>% 
            ax_plotOptions(
                heatmap = heatmap_opts(
                    enableShades = FALSE,
                    colorScale = list(
                        ranges = list(
                            list(from = 0, to = q20, color = "#106e45"), #grün
                            list(from = q20, to = q40, color = "#90dbba"), #leichtes grün
                            list(from = q40, to = q60, color = "#fff33b"), #gelb
                            list(from = q60, to = q80, color = "#f3903f"), # orange
                            list(from = q80, to = 20, color = "#e93e3a") #rot
                        )
                    )
                )
            )  %>% 
            ax_title(
                text = paste("Test interactive heatmap", 
                             input$heatmap_filter
                ), align = "center"
            )
    })
    
}

# Run the application 
shinyApp(ui = ui, server = server)

使用手动方法,一切都按预期进行。但是,当我更改输入 select 时,只有值会发生变化,但热图分位数范围不会发生变化,标题输入也不会发生变化。似乎输入值没有将更改推送到已计算的变量。我已经尝试使用反应式 df 或反应式变量,但到目前为止没有任何效果。

我添加了一个最小示例,您可以在其中更改年份输入,这应该会更改标题和颜色范围。

你能帮帮我吗?

提前致谢。

尝试在对 apex

的调用中将 auto_update 设置为 FALSE
apex(
    data = df,
    type = "heatmap", 
    auto_update = FALSE,
    ...