按下按钮更新时如何渲染ggplot图表?
How to render ggplot chart when button update is pressed?
我希望只有在按下按钮 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
})
})
```
根据?observeEvent
:
observeEvent returns an observer reference class object
这无法绘制。
你可以这样做:
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$myplot
对 input$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
})
我希望只有在按下按钮 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
})
})
```
根据?observeEvent
:
observeEvent returns an observer reference class object
这无法绘制。
你可以这样做:
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$myplot
对 input$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
})