如何在 shiny 中使用 highcharter 为不同的输入变量制作交互式图表

How to make an interactive chart for varying input variables using highcharter in shiny

在 R 中,我想创建一个 highcharter 图表,它根据来自 select 输入字段的用户输入显示不同的组合。但是,我一直在失败。

我有两个输入字段,其中两个输入字段都有两次机会。用户可以 select 任一组合,并且 selected 变量应用于 Highcharter 中的散点图。我尝试了很多机会,但它不起作用。

xvar <- input$varx
yvar <- input$vary

hc <-   chart_df %>%
    hchart('scatter',
       hcaes(x = xvar,
             y = yvar,
             names = xvar),
       dataLabels = list(enabled = TRUE,
                         format = '{point.names}')
)

但是,它不识别指定的 xvar 和 yvar。数据框 chart_df 包含相应的列。 我该如何解决这个问题?如有任何帮助,我们将不胜感激!

问题是 xvaryvar 是字符串。为了使您的代码工作,您必须使用例如将它们转换为符号!!sym() 或使用像 ggplot2::aes_string 一样的 hcaes_string 允许您将变量作为字符传递。

使用 mtcars 作为示例数据集试试这个:

library(shiny)
library(highcharter)
library(rlang)

ui <- fluidPage(

    sidebarLayout(
        sidebarPanel(
            selectInput("varx",
                        "varx",
                        choices = names(mtcars),
                        selected = "hp"),
            selectInput("vary",
                        "vary",
                        choices = names(mtcars),
                        selected = "mpg")
        ),

        # Show a plot of the generated distribution
        mainPanel(
            highchartOutput("highchart"),
            highchartOutput("highchart2")
        )
    )
)

server <- function(input, output) {

    output$highchart <- renderHighchart({
        
        xvar <- input$varx
        yvar <- input$vary
        
        hc <-   mtcars %>%
            hchart('scatter',
                   hcaes(
                       x = !!sym(xvar),
                       y = !!sym(yvar),
                       names = !!sym(xvar)),
                   dataLabels = list(enabled = TRUE,
                                     format = '{point.names}')
            )
    })
    
    output$highchart2 <- renderHighchart({
        
        xvar <- input$varx
        yvar <- input$vary
        
        hc <-   mtcars %>%
            hchart('scatter',
                   hcaes_string(
                       x = xvar,
                       y = yvar,
                       names = xvar),
                   dataLabels = list(enabled = TRUE,
                                     format = '{point.names}')
            )
    })
}

shinyApp(ui = ui, server = server)