Graphique et table réactifs

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Jérémy Lesot
Messages : 6
Enregistré le : 14 Sep 2017, 09:05

Graphique et table réactifs

Messagepar Jérémy Lesot » 21 Nov 2017, 08:54

Bonjour,
je développe une application Shiny et j'ai besoin d'objets réactifs :
j'ai un graphique en barres et un tableau à côté et, lors d'un clic (ou double-click) dans une des barres du plot, j'aimerais que la table se mette à jour automatiquement avec uniquement les lignes correspondantes à la modalité sélectionnée. Par exemple, si je double-clique dans la barre "Premium", mon tableau ne devrait contenir que les observations pour lesquelles cut = "Premium"

Code : Tout sélectionner

ggplot(diamonds,aes(cut)) +
             geom_bar()


D'avance, merci!

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Graphique et table réactifs

Messagepar Serge Rapenne » 21 Nov 2017, 11:11

Bonjour,

je ne pense pas que ce que tu cherches à faire soit possible directement avec ggplot, il faudrait amha se tourner vers plotly (cf par ex : https://plot.ly/r/shiny-coupled-events/)

Serge

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Graphique et table réactifs

Messagepar Serge Rapenne » 21 Nov 2017, 13:23

Je retire ce que j'ai dit, c'est tout à fait possible avec ggplot ou même les fonctions graphique de base. Il faut définir dans ui.R le plotOutput, l'option click = "plot_click" et ajouter dans le server.R quelque chose dans le style

Code : Tout sélectionner

output$TableResultat <- renderTable({info_click<-input$plot_click
   [Selection des données et affichage de la table en fonction du contenu de info_click]
  })


Serge

Jérémy Lesot
Messages : 6
Enregistré le : 14 Sep 2017, 09:05

Re: Graphique et table réactifs

Messagepar Jérémy Lesot » 21 Nov 2017, 15:42

Merci Serge,

je regarde ça dès que possible et communiquerai le résultat!

Cordialement.

Jérémy.

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Graphique et table réactifs

Messagepar Serge Rapenne » 21 Nov 2017, 15:51

Un exemple de code qui fonctionne :

Code : Tout sélectionner

library(ggplot2)
library(shiny)
library(dplyr)

app <- shinyApp(
 
  ui = bootstrapPage(
    plotOutput('plot',click = "plot_click"),
    tableOutput(("dta"))   
  ), #fin ui
  server = function(input, output) {
   dta2<-reactiveValues(val=data.frame(NULL))
   
   observeEvent(input$plot_click,{
      info_click<-input$plot_click     
      if(info_click=="")
        dta2$val<-data.frame(NULL) else{
      lvls <- levels(diamonds$cut)
      name <- lvls[round(info_click$x)]
      resu<-diamonds %>% filter(cut==name)     
      dta2$val<-resu}     
    }) #fin ObserveEvent
   
    output$plot <- renderPlot({
      ggplot(diamonds,aes(cut)) + geom_bar() 
      })
   
    output$dta<-renderTable({
      df<-dta2$val
      if (nrow(df)==0)
        return()
      df})
  }#fin server
)#fin shinyApp
runApp(app)


Pour les classes ayant bcp de données le rendu est plutôt long

Serge

Jérémy Lesot
Messages : 6
Enregistré le : 14 Sep 2017, 09:05

Re: Graphique et table réactifs

Messagepar Jérémy Lesot » 21 Nov 2017, 19:41

Ça marche parfaitement et c'est exactement ce que je voulais!

Un grand merci!

Cordialement.

Jérémy Lesot.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité