我有可以用来生成的数据:
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)
我知道这几乎已经存在了,我只是不知道如何使它看起来更好并以您期望的方式运行。
答案 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)
})
}
我很困惑基于用户输入的子集。问题解决了。谢谢您的帮助!