LoslegenKostenlos loslegen

Mach deinen Plot interaktiv

plotly ist ein beliebtes Paket, um interaktive Plots in Shiny zu erstellen. Es gibt mehrere andere Pakete für interaktive Visualisierungen, aber wir verwenden plotly vor allem wegen der Funktion ggplotly(), die einen ggplot2-Plot in einen interaktiven Plot umwandelt.

Diese Übung ist Teil des Kurses

Fallstudien: Webanwendungen mit Shiny in R erstellen

Kurs anzeigen

Anleitung zur Übung

Der Code für die Shiny-App aus der letzten Übung ist vorgegeben. Deine Aufgabe ist es, den ggplot2-Plot durch einen plotly-Plot zu ersetzen. Konkret:

  • Lade das Paket plotly.
  • Ersetze die Plot-Output-Funktion durch plotlyOutput (Zeile 20).
  • Ersetze die Plot-Render-Funktion durch renderPlotly (Zeile 29).
  • Wandle den vorhandenen ggplot2-Plot in einen plotly-Plot um (Zeile 31).

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# 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)
Code bearbeiten und ausführen