Rendez votre graphique interactif
plotly est un paquet populaire pour créer des graphiques interactifs dans Shiny. Il existe plusieurs autres paquets pour les visualisations interactives, mais nous utiliserons surtout plotly en raison de sa fonction ggplotly(), qui convertit un graphique ggplot2 en graphique interactif.
Cette activité fait partie du cours
Études de cas : créer des applications Web avec Shiny en R
Instructions de l’exercice
Le code de l'application Shiny de l'exercice précédent est fourni. Votre tâche consiste à remplacer le graphique ggplot2 par un graphique plotly. Plus précisément :
- Chargez le paquet
plotly. - Remplacez la fonction d'affichage du graphique par
plotlyOutput(ligne 20). - Remplacez la fonction de rendu du graphique par
renderPlotly(ligne 29). - Convertissez le graphique
ggplot2existant en graphiqueplotly(ligne 31).
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# Load the plotly package
___
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput("title", "Title", "GDP vs life exp"),
numericInput("size", "Point size", 1, 1),
checkboxInput("fit", "Add line of best fit", FALSE),
colourInput("color", "Point color", value = "blue"),
selectInput("continents", "Continents",
choices = levels(gapminder$continent),
multiple = TRUE,
selected = "Europe"),
sliderInput("years", "Years",
min(gapminder$year), max(gapminder$year),
value = c(1977, 2002))
),
mainPanel(
# Replace the `plotOutput()` with the plotly version
plotOutput("plot")
)
)
)
# Define the server logic
server <- function(input, output) {
# Replace the `renderPlot()` with the plotly version
output$plot <- renderPlot({
# Convert the existing ggplot2 to a plotly plot
___({
data <- subset(gapminder,
continent %in% input$continents &
year >= input$years[1] & year <= input$years[2])
p <- ggplot(data, aes(gdpPercap, lifeExp)) +
geom_point(size = input$size, col = input$color) +
scale_x_log10() +
ggtitle(input$title)
if (input$fit) {
p <- p + geom_smooth(method = "lm")
}
p
})
})
}
shinyApp(ui = ui, server = server)