ggplot2
pour des graphiques élégantsCréer une application shiny avec RStudio File
>
New File
> Shiny Web App
.
Donner un nom à votre première application et enregistrer la dans le dossier de votre choix avec le choix “Single File”.
Parcourir et exécuter le code :
#
# This is a Shiny web application. You can run the application by clicking
# the 'Run App' button above.
#
# Find out more about building applications with Shiny here:
#
# http://shiny.rstudio.com/
#
library(shiny)
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Old Faithful Geyser Data"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
output$distPlot <- renderPlot({
# generate bins based on input$bins from ui.R
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
# draw the histogram with the specified number of bins
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
}
# Run the application
shinyApp(ui = ui, server = server)
titlePanel
."darkgray"
, "coral"
,
"lightgreen"
.mainPanel()
avec l’aide de
la fonction tabsetPanel()
styles.css
déposé dans le répertoire
www
darkblue
par exemple)purple
par exemple)darkblue
par exemple) et en passant le texte en gras
(font-weight=bold
)x <- rnorm(10)
.x <- faithful[, 2]
) de la fonction et la remplacer
par un appel à l’expression réactive datasetInput()
(x <- datasetInput()
) qui permettra de gérer les
données de manière dynamique et réactive. Avant le
renderPlot
, on définit l’expression réactive
datasetInput tel que :datasetInput <- reactive({faithful$waiting})
Tester l’application et vérifier que tout fonctionne toujours. Essayer de comprendre et d’assimiler l’articulation des différents éléments. > app6.R
Maintenant que tout est fonctionnel, à l’aide d’une liste
déroulante, proposer le choix entre la durée des éruptions du geyser
Old Faithful (faithful$waiting
), la longueur des
sépales des iris de Fisher (iris$Sepal.Length
) ou
la puissance des voitures d’après Motor Trend
(mtcars$hp
). Mettre mettre à jour
datasetInput()
en fonction de ce choix.
else if
ou bien la fonction switch
.rnorm(100)
si random est sélectionné dans le champ data.reactive()
ne dépend pas des
inputs du choix de couleur ou du nombre de bins. Le tirage
aléatoire ne change donc pas lorsque la couleur ou les bins
sont modifiés.Dans la barre de paramètres, ajouter une section dédiée aux
paramètres du tirage (n
, mean
,
sd
).
Bonus : afficher ces paramètres uniquement
lorsque l’on sélectionne les données aléatoires dans la liste déroulante
(voir conditionalPanel
, attention à la syntaxe).
Bonus : ajouter un bouton “Relancer” qui permet de relancer le tirage des données aléatoires lorsqu’on clique dessus.
Note : la solution proposée utilise des
reactiveVal()
, c’est à dire des variables réactives dont
vous pouvez contrôler manuellement la mise à jour en plus de
son caractère réactif (via un observeEvent()
ou un
observe() %>% bindEvent()
)
Bonus : remplacer le bouton “Relancer” par un
bouton “Confirmer / Relancer” qui force l’utilisateur à confirmer son
choix de paramètres (n
, mean
, sd
)
avant de générer les données aléatoires
Note : la stratégie possible consiste à utiliser
2 reactive()
enchaînés (dont un soumis à un
bindEvent()
) et le choix apparaît clairement lorsqu’on
trace le graphe de réactivité.
read.csv(file, header = FALSE)[,1]
pour extraire la
première colonne.input$file
est un data.frame
qui continent 4 éléments :
name
: Le nom du fichier. Il ne s’aggit pas du chemin
complet.size
: La taille du fichier téléchargé, en octets.type
: Le type du fichier ou un string vide si le
navigateur ne le sait pas.filepath
: Le chemin d’accès à un fichier temporaire qui
contient les données téléchargées. Ce fichier peut être supprimé si
l’utilisateur effectue une autre opération de téléchargement. C’est
cette variable qu’il faudra utiliser pour acédéer aux données.validate()
et
need()
anisi que l’opérateur booléen OR
||
ggplot2
pour des graphiques élégantsggplot2
comme de nombreux autres packages R utilise les
dataframes. On va donc exploiter nos données avec ce format.
faithful
, iris
et
mtcars
, ce sont des dataframesdatasetInput
par :datasetInput <- reactive({
switch(input$data,
"faithful" = faithful,
"iris" = iris,
"mtcars" = mtcars,
"random" = data.frame("rnorm" = rnorm(n = input$randomN, mean = input$randomMean, sd = input$randomSd)),
"upload" = read.csv(input$file$datapath, header = TRUE))
})
varSelectInput
destiné à sélectionner
une variable
uiOutput
qui
renverra vers le renderUI
associé où sera placé le
widget.ggplot2
, voici directement les fonctions. Si vous êtes à
l’aise, laissez libre cours à votre imagination pour les personnaliser.
ggplot(data = datasetInput(), aes_string(x = input$variable)) + geom_histogram(bins = input$bins, fill = input$color, color = "white")
ggplot(data = datasetInput(), aes_string(y = input$variable)) + geom_boxplot(fill = input$color)
downloadHandler
et ggsave
.Note : pour que le téléchargement se lance correctement, lancer l’application dans un “vrai” navigateur. Utiliser la commande :
runApp('app11.R', launch.browser = TRUE)
On peut facilement mettre en forme l’interface utilisateur d’une application avec CSS (cascading style sheets).
bootstrap.css
dans le dossier
www/
de votre applitheme = "bootstrap.css"
dans la
fonction fluidPage()
app13.R avec un fichier bootstrap.css dans le dossier
www/
https://<domaine>.shinyapps.io/<appli>/
.rsconnect
.app.R
ou bien ui.r
+server.R
.A work by Migale Bioinformatics Facility
https://migale.inrae.fr
Our two affiliations to cite us:
Université Paris-Saclay, INRAE, MaIAGE, 78350, Jouy-en-Josas, France
Université Paris-Saclay, INRAE, BioinfOmics, MIGALE bioinformatics facility, 78350, Jouy-en-Josas, France