如何根据滑块输入值的增量为我的 R Shiny 图的输出设置动画?
How do I animate my R Shiny plot's output based on the increments of slider input value?
我查看了 R Shiny 教程和 Whosebug,寻找与我的查询相关的答案。在尝试 post 之前,我通常会等待 3-4 天来解决编码问题。
我的 UI 中有一个动画滑块,它在列(a 列)的时间间隔内循环。我试图制作一个动画线图,绘制另一列(b 列)的 y 值,对应于该时间间隔的 nrow()。滑块工作完美,但我无法绘制输出。
我可能错过了一些与 Shiny 应用程序中的反应性相关的概念。感谢我可以获得与我的查询相关的任何指导。如果需要,我很乐意 post 更多信息。
a <- c(0,1,2,3,4,5,6)
b <- c(50,100,40,30,20,80)
mydata <- cbind(a,b)
mydata <- as.data.frame(mydata())
ui <- fluidPage (
headerPanel("basic app"),
sidebarPanel(
sliderInput("slider",
label = "Time elapsed",
min = 0,
max = nrow(mydata()),
value = 1, step = 1,
animate =
animationOptions(interval = 200, loop = TRUE))
),
mainPanel(
plotlyOutput("plot")
)
)
server <- function(input, output) {
sliderValues <- reactive({
data.frame(
Name = "slider",
Value = input$slider)
})
output$plot <- renderPlot({
x<- as.numeric(input$slider)
y <- as.numeric(b[x])
ggplot(mydata,aes_string(x,y))+ geom_line()
})
}
作为演示,我希望动画情节像这样出现,但对应于 UI 滑块值:
library(gganimate)
library(ggplot2)
fake <- c(1,10)
goods <- c(11,20)
fakegoods <- cbind(fake,goods)
fakegoods <- data.frame(fakegoods)
ggplot(fakegoods, aes(fake, goods)) + geom_line() + transition_reveal(1, fake)
这是否实现了您正在寻找的目标?请注意,我从向量 a
中删除了第一个元素 0
,因为您的原始示例在 a
中的元素多于 b
,并且为了使它们成为 cbind
他们必须是相同的长度。
library(ggplot2)
library(shiny)
a <- c(1,2,3,4,5,6)
b <- c(50,100,40,30,20,80)
mydata <- cbind(a,b)
mydata <- as.data.frame(mydata)
ui <- fluidPage (
headerPanel("basic app"),
sidebarPanel(
sliderInput("slider",
label = "Time elapsed",
min = min(mydata$a),
max = max(mydata$a),
value = min(mydata$a), step = 1,
animate =
animationOptions(interval = 200, loop = TRUE))
),
mainPanel(
plotOutput("plot")
)
)
server <- function(input, output) {
output$plot <- renderPlot({
plotdata <- mydata[1:which(input$slider==mydata$a),]
p <- ggplot(plotdata,aes(x = a,y = b))
if(nrow(plotdata)==1) {
p + geom_point()
} else {
p + geom_line()
}
})
}
我查看了 R Shiny 教程和 Whosebug,寻找与我的查询相关的答案。在尝试 post 之前,我通常会等待 3-4 天来解决编码问题。
我的 UI 中有一个动画滑块,它在列(a 列)的时间间隔内循环。我试图制作一个动画线图,绘制另一列(b 列)的 y 值,对应于该时间间隔的 nrow()。滑块工作完美,但我无法绘制输出。
我可能错过了一些与 Shiny 应用程序中的反应性相关的概念。感谢我可以获得与我的查询相关的任何指导。如果需要,我很乐意 post 更多信息。
a <- c(0,1,2,3,4,5,6)
b <- c(50,100,40,30,20,80)
mydata <- cbind(a,b)
mydata <- as.data.frame(mydata())
ui <- fluidPage (
headerPanel("basic app"),
sidebarPanel(
sliderInput("slider",
label = "Time elapsed",
min = 0,
max = nrow(mydata()),
value = 1, step = 1,
animate =
animationOptions(interval = 200, loop = TRUE))
),
mainPanel(
plotlyOutput("plot")
)
)
server <- function(input, output) {
sliderValues <- reactive({
data.frame(
Name = "slider",
Value = input$slider)
})
output$plot <- renderPlot({
x<- as.numeric(input$slider)
y <- as.numeric(b[x])
ggplot(mydata,aes_string(x,y))+ geom_line()
})
}
作为演示,我希望动画情节像这样出现,但对应于 UI 滑块值:
library(gganimate)
library(ggplot2)
fake <- c(1,10)
goods <- c(11,20)
fakegoods <- cbind(fake,goods)
fakegoods <- data.frame(fakegoods)
ggplot(fakegoods, aes(fake, goods)) + geom_line() + transition_reveal(1, fake)
这是否实现了您正在寻找的目标?请注意,我从向量 a
中删除了第一个元素 0
,因为您的原始示例在 a
中的元素多于 b
,并且为了使它们成为 cbind
他们必须是相同的长度。
library(ggplot2)
library(shiny)
a <- c(1,2,3,4,5,6)
b <- c(50,100,40,30,20,80)
mydata <- cbind(a,b)
mydata <- as.data.frame(mydata)
ui <- fluidPage (
headerPanel("basic app"),
sidebarPanel(
sliderInput("slider",
label = "Time elapsed",
min = min(mydata$a),
max = max(mydata$a),
value = min(mydata$a), step = 1,
animate =
animationOptions(interval = 200, loop = TRUE))
),
mainPanel(
plotOutput("plot")
)
)
server <- function(input, output) {
output$plot <- renderPlot({
plotdata <- mydata[1:which(input$slider==mydata$a),]
p <- ggplot(plotdata,aes(x = a,y = b))
if(nrow(plotdata)==1) {
p + geom_point()
} else {
p + geom_line()
}
})
}