首页 > 解决方案 > echarts4r:用 selectInput 连接图表图例

问题描述

我正在尝试构建一个闪亮的应用程序,显示来自 echarts4r 包的图表。

该应用程序包含一个选择输入、一个条形图和一个散点图。

我的目标是连接这三个对象。当我单击条形图的一个项目时,我希望图表被此元素过滤。同时,选择输入应反映此选择。单击散点图图例中的项目时也会发生同样的情况。

这是一些示例代码:

library(shiny)
library(tidyverse)
library(echarts4r)

ui <- fluidPage(

    sidebarLayout(
        sidebarPanel(
            selectInput("am", h3("Choose am"),
                        choices = c(0,1), 
                        selected = c(0,1),
                        multiple = TRUE) 
        ),

        mainPanel(
            echarts4rOutput("mt_plot"),
            echarts4rOutput("mt_scatter_plot")
        )
    )
)

server <- function(input, output, session) {

    output$mt_plot <- renderEcharts4r({
        mtcars_1 <- mtcars %>%
            filter(am %in% input$am)  %>%
            group_by(cyl, am) %>%
            summarize(avg_mpg = mean(mpg))

        mtcars_1 %>%
            group_by(am) %>%
            e_charts(cyl) %>%
            e_bar(avg_mpg)
        })


    observe({
        input$mt_plot_legend_change
        input$mt_scatter_plot_legend_change

        if(!is.null(input$mt_plot_legend_change)){

            x <- input$mt_plot_legend_change}
        else{
            x <- input$mt_scatter_plot_legend_change
            } 


        updateSelectInput(session, "am",
                          selected = x
        )
    })

    output$mt_scatter_plot <- renderEcharts4r({
        mtcars_1 <- mtcars %>%
            filter(am %in% input$am)

        mtcars_1 %>% 
            group_by(am) %>%
            e_charts(disp) %>% 
            e_scatter(qsec, symbol_size = 15) 
    })

}


shinyApp(ui = ui, server = server)

上面的应用程序的行为不像我想要的那样。以下场景说明了我的意思。

  1. 单击值 1 上的条形图的图例 -> 行为正确,因为条形图仅显示所选值,并且选择输入将其所选值更改为 1

  2. 下一步:使用选择输入带回值 0 -> 这也有效。

  3. 下一步:再次单击值 1 上的条形图的图例。 -> 这次的行为与数字 1 中的行为不同。我希望与数字 1 中的行为相同。图表应该被过滤通过选定的值和选择输入也应该反映这一点。

任何帮助深表感谢!

标签: rshinyecharts

解决方案


推荐阅读