проблемы с эстетической длиной - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть данные, которые вы можете сгенерировать с помощью:

set.seed(3)
dat.0<-as.data.frame(expand.grid(c("MATH","CHEM","BIOL"),c("Spring","Summer","Fall"),c(2016,2017,2018),0:17))
names(dat.0)<-c("SUBJ","SEM","YEAR","WEEK")
dat.0$MEET<-floor(runif(486,0,150))

Я пытаюсь создать блестящее приложение, которое будет отображать линейный сюжет серии "MEET" с "WEEK" на оси x, окрашенной полем "SUBJ".

снаружи блестящий сюжет выглядит отлично:

dat.0%>%
  ggplot(aes(x = WEEK,y = MEET,colour = SUBJ))+
  geom_point()+
  geom_path()+
  facet_grid(YEAR~SEM)

но когда я использую блестящий для создания приложения, оно выдает ошибку, если я пытаюсь нанести на график более одной серии. Более того, если вы строите каждую серию по отдельности внутри приложения, вы понимаете, что независимо от того, какой «SUBJ» вы выберете, он печатает один и тот же график:

choices = levels(as.factor(dat.0$SUBJ))
# Define UI for application that draws a histogram
ui <- fluidPage(

  # Application title
  titlePanel("STEM Tutoring App"),

  # Sidebar with a slider input for number of bins 
  sidebarLayout(
    sidebarPanel(
      selectInput("SUBJ",
                  "Course Subject:",
                  choices = choices,
                  multiple = T,
                  selectize = T)
    ),

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

server <- function(input, output) {

  output$linePlot <- renderPlot({
    req(input$SUBJ)
    dat.0%>%
      ggplot(aes(x = WEEK,y = MEET,colour = input$SUBJ))+
      geom_point()+
      geom_path()+
      facet_grid(YEAR~SEM)})}
# Run the application 
shinyApp(ui = ui, server = server)

Я знаю, что это почти там, я просто не знаю, как сделать так, чтобы он выглядел хорошо и функционировал так, как вы ожидаете.

1 Ответ

0 голосов
/ 10 сентября 2018

Хитрость в этом, как объясняет пользователь @aosmith в комментариях, заключается в том, что вы должны заставить набор данных реагировать на пользовательские входные данные путем определения параметров поднабора после боковой панели в функции renderPlot, поэтому вы должны поместить

server <- function(input,output) {

   output$linePlot<-renderPlot({
       req(input$SUBJ)

       plot.data <- dat.0 %>%
           dplyr::filter(SUBJ %in% input$SUBJ)

       plot.data %>%
           ggplot(aes(x = WEEK, y = MEET, colour = SUBJ)) +
           geom_point() +
           geom_path() +
           facet_grid(YEAR~SEM)
    })
}

Подмножество, основанное на пользовательском вводе, было где я запутался. проблема решена, хотя. спасибо за помощь!

...