按下按钮更新时如何渲染ggplot图表?

时间:2017-03-28 22:03:54

标签: r shiny flexdashboard

我希望只有当我按下按钮updt时才会重新呈现此图表。这是我到目前为止的代码

---
title: ""
author: 
output: 
  flexdashboard::flex_dashboard:
    storyboard: true

runtime: shiny
---


```{r setup, include=FALSE}
library(flexdashboard)
library(ggplot2)
library(dplyr)
```

Column {data-width=650}
-----------------------------------------------------------------------

### Chart A

```{r}
actionButton('updt', 'Update chart')
checkboxGroupInput('gear', 'number of gears', unique(mtcars$gear), (mtcars$gear))
observeEvent( eventExpr = input$updt , handlerExpr = {
  renderPlot({
    dd <- mtcars %>% filter(gear %in% input$gear)
    f1 <- ggplot(aes(mpg, disp), data=dd) + geom_point()
    f1
  })

})

```

1 个答案:

答案 0 :(得分:1)

根据?observeEvent

  

observeEvent返回一个观察者引用类对象

无法绘制。

您可以执行以下操作:

observeEvent( eventExpr = input$updt , handlerExpr = {
  output$myplot <- renderPlot({
    dd <- mtcars %>% filter(gear %in% isolate(input$gear))
    f1 <- ggplot(aes(mpg, disp), data=dd) + geom_point()
    f1
  })
})
plotOutput("myplot")

但仍然必须isolate(input$gear) output$myplotinput$gear

反应

所以最好删除observeEvent,添加req(input$updt)以使renderPlot对其进行反应并isolate(input$gear)

renderPlot({
    req(input$updt)
    dd <- mtcars %>% filter(gear %in% isolate(input$gear))
    f1 <- ggplot(aes(mpg, disp), data=dd) + geom_point()
    f1
  })