我正在尝试创建一个可以放大范围和y轴重新缩放的绘图。类似于根据缩放在交互式绘图上重新缩放y轴,只是我希望它在双击时发生。
library(shiny)
library(tidyverse)
ui <- fluidPage(
sidebarPanel(
actionButton('getdata', 'Get Data')
),
mainPanel(
plotOutput('plot', brush = brushOpts(id = 'brush'), dblclick = 'dclick')
)
)
server <- function(input, output, session) {
dat <- eventReactive(input$getdata, {
tibble('BusDate' = Sys.Date() - 0:10, 'Val' = rnorm(11))
})
dat2 <- reactive(dat())
observeEvent(input$dclick, {
brush <- input$brush
maxy <- brush$xmax
miny <- brush$xmin
if (is.null(miny)){
dat2(dat())
}else{
dat2(dat() %>% filter(BusDate > miny & BusDate < maxy))
}
}, ignoreInit = TRUE)
output$plot <- renderPlot({
ggplot(dat2(), aes(x = BusDate, y = Val)) + geom_line()
})
}
shinyApp(ui, server)
我一直收到一个错误,不允许我在观察事件中更新dat2。
Error in dat2: unused argument (dat() %>% filter(BusDate > miny & BusDate < maxy))
如何在observeEvent中更新dat2?我知道更新reactiveValues更容易,但我想知道它是如何与reactiveVal 一起工作的
试试这个:
library(shiny)
library(tidyverse)
ui <- fluidPage(
sidebarPanel(
actionButton('getdata', 'Get Data')
),
mainPanel(
plotOutput('plot', brush = brushOpts(id = 'brush'), dblclick = 'dclick')
)
)
server <- function(input, output, session) {
dat <- eventReactive(input$getdata, {
tibble('BusDate' = Sys.Date() - 0:10, 'Val' = rnorm(11))
})
dat2 <- reactiveVal()
observeEvent(input$dclick, {
brush <- input$brush
maxy <- brush$xmax
miny <- brush$xmin
if (is.null(miny)){
dat2(dat())
}else{
dat2(dat() %>% filter(BusDate > miny & BusDate < maxy))
}
}, ignoreInit = TRUE)
output$plot <- renderPlot({
df <- if(is.null(dat2())) dat() else dat2()
ggplot(df, aes(x = BusDate, y = Val)) + geom_line()
})
}
shinyApp(ui, server)
您混淆了reactive
和reactiveVal
。只能在其定义中更新reactive
的值。obj(xxx)
的更新适用于reactiveVal
。