如何在echarts4r中单独控制线 我有一个闪亮的应用程序,该应用使用echarts4r软件包显示动画线条。 我想使用复选框单独控制每个动画行。 例如,当我选中一行复选框时,

问题描述 投票:0回答:1
我想使用复选框单独控制每个动画行。

例如,当我检查

Line A
复选框时,线A的动画应启动并保持可见,直到我取消选中为止。相同的行为应适用于每条额外的行。

否,当前的行为是当我检查复选框时,所有行都会重新启动其动画,然后一起消失。如何修改我的应用程序,以便独立控制每个行的动画而不会影响其他动画?

这里是一个例子:

library(shiny)
library(echarts4r)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      checkboxInput("lineA", "Show Line A", value = TRUE),
      checkboxInput("lineB", "Show Line B", value = TRUE),
      checkboxInput("lineC", "Show Line C", value = TRUE)
    ),
    mainPanel(
      echarts4rOutput("chart", height = "400px")
    )
  )
)

server <- function(input, output, session) {
  set.seed(123)
  df <- data.frame(
    x  = 1:10,
    yA = cumsum(runif(10, -1, 1)),
    yB = cumsum(runif(10, -1, 1)),
    yC = cumsum(runif(10, -1, 1))
  )
  
  output$chart <- renderEcharts4r({
    chart <- df %>% e_charts(x)
    
    if (input$lineA) {
      chart <- chart %>% 
        e_line(serie = yA, name = "Line A")
    }
    if (input$lineB) {
      chart <- chart %>% 
        e_line(serie = yB, name = "Line B")
    }
    if (input$lineC) {
      chart <- chart %>% 
        e_line(serie = yC, name = "Line C")
    }
    
    chart %>% 
      e_tooltip(trigger = "axis") %>% 
      e_legend()
  })
}

shinyApp(ui, server)

问题:

可以控制动画线,逐条线?

还有其他选择来完成此任务吗?

  1. 如果我正确理解您,您可以使用
  2. echarts4rProxy
  3. 和一些
observeEvent
r shiny echarts4r
1个回答
0
投票
isolate()

。最后,请注意,

e_legend
的使用要求至少在启动时检查了所有选项(也许是一个错误,或者我根本没有找到正确的选项(:):
library(shiny)
library(echarts4r)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      checkboxInput("lineA", "Show Line A", value = TRUE),
      checkboxInput("lineB", "Show Line B", value = TRUE),
      checkboxInput("lineC", "Show Line C", value = TRUE)
    ),
    mainPanel(
      echarts4rOutput("chart", height = "400px")
    )
  )
)

server <- function(input, output, session) {
  set.seed(123)
  df <- data.frame(
    x  = 1:10,
    yA = cumsum(runif(10, -1, 1)),
    yB = cumsum(runif(10, -1, 1)),
    yC = cumsum(runif(10, -1, 1))
  )

  output$chart <- renderEcharts4r({
    chart <- df |>
      e_charts(x) |>
      e_tooltip(trigger = "axis") |>
      e_legend()
    
    if (isolate(input$lineA)) chart <- e_line(chart, serie = yA, name = "Line A")
    if (isolate(input$lineB)) chart <- e_line(chart, serie = yB, name = "Line B")
    if (isolate(input$lineC)) chart <- e_line(chart, serie = yC, name = "Line C")
    
    chart
  })

  observeEvent(input$lineA, {
    name <- "Line A"
    proxy <- echarts4rProxy("chart", data = df, x = x)
    proxy <- e_remove_serie(proxy, name)
    if (input$lineA) proxy <- e_line(proxy, serie = yA, name = name)
    proxy |>
      e_execute()
  })

  observeEvent(input$lineB, {
    name <- "Line B"
    proxy <- echarts4rProxy("chart", data = df, x = x)
    proxy <- e_remove_serie(proxy, name)
    if (input$lineB) proxy <- e_line(proxy, serie = yB, name = name)
    proxy |>
      e_execute()
  })

  observeEvent(input$lineC, {
    name <- "Line C"
    proxy <- echarts4rProxy("chart", data = df, x = x)
    proxy <- e_remove_serie(proxy, name)
    if (input$lineC) proxy <- e_line(proxy, serie = yC, name = name)
    proxy |>
      e_execute()
  })
}

shinyApp(ui, server)

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.