例如,当我检查
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)
问题:
可以控制动画线,逐条线?
还有其他选择来完成此任务吗?
echarts4rProxy
observeEvent
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)