美观长度存在问题geom_line闪亮

时间:2018-09-10 14:38:08

标签: r ggplot2 shiny facet

我有可以用来生成的数据:

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))

我正在尝试制作一个闪亮的应用程序,该应用程序将在由“ SUBJ”字段着色的x轴上显示带有“ WEEK”的“ MEET”系列的线图。

在闪亮的情节之外看起来不错:

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

但是当我使用Shiny来创建应用程序时,如果我尝试在绘图上绘制多个序列,则会抛出错误。此外,如果您在应用程序内分别绘制每个系列,您将意识到无论选择哪个“ 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 :(得分:0)

@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)
    })
}
我很困惑基于用户输入的

子集。问题解决了。谢谢您的帮助!