【问题标题】:How to render ggplot chart when button update is pressed?按下按钮更新时如何渲染ggplot图表?
【发布时间】:2017-08-22 04:32:35
【问题描述】:

我希望仅在按下按钮 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
  })

})

```

【问题讨论】:

    标签: r shiny flexdashboard


    【解决方案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
      })
    

    【讨论】:

    • 谢谢,您的解决方案通常比observeEvent 更可取,还是您更喜欢?
    猜你喜欢
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 2013-05-15
    • 2017-12-20
    • 2020-02-20
    • 2018-08-30
    • 1970-01-01
    • 2019-10-22
    相关资源
    最近更新 更多