Гистограмма Shiny R не меняется с помощью ползунка - PullRequest
1 голос
/ 25 мая 2020

Я пытаюсь создать гистограмму, используя shiny в моем наборе данных . Я хотел бы иметь возможность использовать на нем ползунок для изменения количества гистограмм. В моем наборе данных есть столбец (процент какао) со значениями в [50, 100]. Сделав его числовым c вместо категориального, я бы использовал гистограмму, чтобы увидеть частоту 50, 51, ... или частоту 50-55, 56-60, ... Я написал этот код, но ничего происходит когда я его запускаю. Что я делаю не так? Не могли бы вы помочь мне заставить его работать?


library(shiny)
library(shinythemes)
library(ggplot2)
library(plotly)
library(leaflet)
library(DT)

ui <- fluidPage(

    titlePanel("Chocolate Bar Ratings"),

        # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            sliderInput("bins",
                        "Number of bins:",
                        min = 1,
                        max = 50,
                        value = 1)
        ),

        # Show a plot of the generated distribution
        mainPanel(
           plotOutput("distPlot")
        )
    )
)

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(chocolate$CocoaPerc, xlab="Percentuale di cacao", main="Frequenza della percentuale
di cacao", col = c("chocolate", "chocolate3", "chocolate2", "chocolate4"))

    })
}

# Run the application 
shinyApp(ui = ui, server = server)

1 Ответ

1 голос
/ 25 мая 2020

Причина в том, что input$bins не использовался в функции output$distPlot, см. Комментарий # <---. Также обратите внимание, что я только что придумал случайный набор данных:

library(shiny)

chocolate <- data.frame(CocoaPerc=runif(100, min=0, max=99))

ui <- fluidPage(

  titlePanel("Chocolate Bar Ratings"),

  # Sidebar with a slider input for number of bins 
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 1)
    ),

    # Show a plot of the generated distribution
    mainPanel(
      plotOutput("distPlot")
    )
  )
)

server <- function(input, output) {

  output$distPlot <- renderPlot({
    # draw the histogram with the specified number of bins
    hist(chocolate$CocoaPerc, 
         nclass = input$bins, # <---
         xlab="Percentuale di cacao", 
         main="Frequenza della percentuale di cacao", 
         col = c("chocolate", "chocolate3", "chocolate2", "chocolate4"))
  })
}

# Run the application 
shinyApp(ui = ui, server = server)
...