gpt4 book ai didi

r - 有没有办法根据矢量的特定值在 R 中为仪表设置动画?

转载 作者:行者123 更新时间:2023-12-01 15:33:03 25 4
gpt4 key购买 nike

我正在尝试创建一个动画仪表图表,该图表根据向量中定义的特定值而变化。这是针对 R 中的 Shiny 应用程序。我目前正在使用 C3 库,但没有任何限制。我确实想在 R 中用 Shiny 的代码编写这个。

下面的代码做了类似的事情,但动画以随机值运行。我想为动画的每一帧设置特定的值。

runApp(list(
ui = bootstrapPage(
# example use of the automatically generated output function
column(6, C3GaugeOutput("gauge1"))
),
server = function(input, output) {

#riskList <- c(10,20,30,40,50,60,70,80,90,100)


# reactive that generates a random value for the gauge
value = reactive({
invalidateLater(1000)
round(runif(1,min=0,max=100),2)
})

# example use of the automatically generated render function
output$gauge1 <- renderC3Gauge({
# C3Gauge widget
C3Gauge(value())
})
}
))

输出应该类似于我们在绘图中使用带有 frame 参数的动画图表时得到的输出。我应该有一个输入向量(例如 c(10,20,30,40,50))、一个播放按钮和一个仪表图作为输出。我希望仪表显示和输出 10,然后是 20,然后是 30,依此类推,一旦我单击按钮。

最佳答案

尝试使用应用程序状态变量和不断重新验证gauge_value 的这种方法。

library(c3)
library(shiny)

ui <- fluidPage(
c3Output("gauge1"),
actionButton("start_button", "Start Engines")
)

server <- function(input, output, session) {
gauge_breaks <- seq(0, 100, 10)
is_animating <- FALSE
current_index <- 1

observeEvent(input$start_button, {
current_index <<- 0
is_animating <<- TRUE
})

gauge_value = reactive({
invalidateLater(1000)

if(is_animating)
current_index <<- current_index + 1

if(current_index == length(gauge_breaks))
is_animating <<- FALSE

data.frame(rpm = as.numeric(gauge_breaks[current_index]))
})

output$gauge1 <- renderC3({
c3_gauge(c3(gauge_value()))
})
}

虽然我不喜欢使用 <<-运算符,我发现这个版本比另一个将当前索引存储在 numericInput 中的版本更容易理解。隐藏在一个永远隐藏的地方 conditionalPanel .这种方法需要一个 isolate()为了坚持 invalidateLater()而不是更新 gauge_value()每次索引更改时立即。

关于r - 有没有办法根据矢量的特定值在 R 中为仪表设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56604479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com