2017-03-28 2 views
0

Je voudrais avoir ce tableau à rediffuser seulement quand j'appuie sur le bouton updt. Ceci est le code que j'ai jusqu'à présentComment rendre le graphique ggplot lorsque vous appuyez sur le bouton de mise à jour?

--- 
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épondre

1

Selon ?observeEvent:

observeEvent retourne un objet de classe de référence d'observateur

Cela ne peut pas être tracée.

Vous pouvez faire quelque chose comme:

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") 

mais vous devez isolate(input$gear) comme output$myplot est réactif à input$gear

Donc, le mieux est de supprimer le observeEvent, ajouter req(input$updt) faire renderPlot réactive lui et 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 
    }) 
+0

Merci, c'est votre solution généralement préférable à 'observeEvent' ou juste quelque chose que vous préférez? – Dambo

+0

J'ai mis à jour ma réponse – HubertL