Как я могу получить условный контрольный ввод для построения графика ggplot?

#r #shiny

Вопрос:

Поэтому мне было трудно получить условный флажок, чтобы создать график ggplot. Мне просто интересно, что я делаю не так в server.R файле?

Кажется, я не могу создать этот график ggplot, используя набор данных msleep: ggplot(newData, aes(x = bodywt, y = sleep_total, color= conservation, alpha=sleep_rem)) geom_point() .

ui.R:

 shinyUI(fluidPage(

  # Application title
  titlePanel(uiOutput("title_panel")),

  # Sidebar with options for the data set
  sidebarLayout(
    sidebarPanel(
      selectizeInput("vore", "Vore", selected = "omni", choices = levels(as.factor(msleep$vore))),
      br(),
      sliderInput("size", "Size of Points",
              min = 1, max = 10, value = 5, step = 1),
      checkboxInput("conservation", h4("Color Code Conservation Status", style = "color:green;")),
      conditionalPanel(
        condition = "input.conservation==true",
        checkboxInput("symbol", p("Also change symbol based off of REM sleep?", style = "color:black;"))
      )
  ),

  # Show outputs
  mainPanel(
    plotOutput("sPlot"),
  )
 )
))
 

сервер.R:

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

shinyServer(function(input, output, session) {

  get.data <- reactive({
    new.data <- msleep %>% filter(vore == input$vore)
  })
  output$sPlot <- renderPlot({
    new.data <- get.data()

    g <- ggplot(new.data, aes(x = bodywt, y = sleep_total))

    if(input$conservation){
      g   geom_point(size = input$size, aes(col = conservation))
    } else if(input$symbol){#Currently I can't seem to produce this ggplot below
      ggplot(newData, aes(x = bodywt, y = sleep_total, color= conservation, alpha=sleep_rem)) geom_point()
    } else {
      g   geom_point(size = input$size)
    }
  })
})
 

Мы будем очень признательны за любую помощь.

Комментарии:

1. Ваш ggplot(newData, aes(x = bodywt, y = sleep_total, color= conservation, alpha=sleep_rem)) не включает в себя никаких геом. Как именно вы хотите отобразить эти данные? Вы хотите использовать очки? Если да, добавьте geom_poin() в конце.

2. Привет, @MrFlick. Да, я хотел использовать очки. Однако, несмотря на то , что я добавляю geom_point , я все еще не вижу данных, которые хочу отобразить.

3. Этот пример кажется неполным. Существует код, который просматривается input$vore и input$size которого нет в пользовательском интерфейсе

4. Привет @MrFlick, только что добавил input$vore и input$size в пользовательский интерфейс.

Ответ №1:

Ваша логика была неверной. Вы отображаете только второй флажок, если установлен первый флажок (TRUE). В этом случае логика должна следовать той же самой. Попробуй это…

 server <- shinyServer(function(input, output, session) {
  
  get.data <- reactive({
    new.data <- msleep %>% filter(vore == input$vore)
  })
  output$sPlot <- renderPlot({
    new.data <- get.data()
    
    g <- ggplot(new.data, aes(x = bodywt, y = sleep_total))
    
    if(input$conservation){
      if(input$symbol){
        g <- g   geom_point(aes(color= conservation, alpha=sleep_rem, size = input$size))
      }else g <- g   geom_point(size = input$size, aes(col = conservation))
    } else {
      g <- g   geom_point(size = input$size)
    }
    g
  })
})