這是跟我的問題here。R閃亮:重置繪圖到默認狀態
我有一個圖形,當我啓動閃亮的應用程序時顯示,然後我想運行一些代碼,從數據中「動畫」一些抽樣。
我想實現一個重置/清除按鈕來重置繪圖到它的原始狀態(即好像我剛剛啓動了應用程序)。有任何想法嗎?我目前的代碼
工作例如:
library(shiny)
library(ggplot2)
invalidateLaterNew <- function (millis, session = getDefaultReactiveDomain(), update = TRUE)
{
if(update){
ctx <- shiny:::.getReactiveEnvironment()$currentContext()
shiny:::timerCallbacks$schedule(millis, function() {
if (!is.null(session) && session$isClosed()) {
return(invisible())
}
ctx$invalidate()
})
invisible()
}
}
unlockBinding("invalidateLater", as.environment("package:shiny"))
assign("invalidateLater", invalidateLaterNew, "package:shiny")
data <- data.frame(ID=1:60,
x=sort(runif(n = 60)),
y=sort(runif(n = 60)+rnorm(60)))
ui <- fluidPage(
sidebarPanel(
sliderInput("n",
"Number of samples:",
min = 10,
max = nrow(data),
value = 20),
sliderInput("surveys",
"Number of surveys:",
min = 1,
max = 10,
value = 5),
actionButton("button", "Go!"),
actionButton("reset", "Reset")
),
# Show the plot
mainPanel(
plotOutput("plot1")
)
)
server <- function(input, output, session) {
plot1 <- NULL
count <- 0
output$plot1 <- renderPlot({
plot1 <<- ggplot(data, aes(x=x, y=y)) + geom_point(colour="red") + theme_bw()
plot1 <<- plot1 + geom_vline(xintercept = mean(data$x), size=1.1, colour="red")
plot1
})
observeEvent(input$button,{
count <<- 0
output$plot1 <- renderPlot({
count <<- count+1
invalidateLater(500, session, count < input$surveys)
data$sampled <- "red"
sample.rows <- sample(data$ID, input$n)
data$sampled[sample.rows] <- "green"
plot1 <<- plot1 + geom_point(x=data$x, y=data$y, colour=data$sampled, size=2)
sample.mean.x <- mean(data$x[sample.rows])
plot1 <<- plot1 + geom_vline(xintercept = sample.mean.x, colour="green")
plot1
})
})
}
# Run the application
shinyApp(ui = ui, server = server)
我已經試過包裝在一個observeEvent
呼叫與復位按鈕輸入第一個renderPlot({...})
電話,但沒有好。我也嘗試創建第三個renderPlot({...})
呼叫,其中有一個observeEvent
。 我甚至試圖將「原始」plot1
複製到第二個變量,並回想一下在重置按鈕上,但沒有運氣。
您可以嘗試'shinyjs :: reset()',如本文檔中所述:https://rdrr.io/cran/shinyjs/man/reset.html。使用'reset(id)',其中'id'可以是一個輸入元素或一個div的id來重置該div中的所有輸入元素。 – neilfws