使用checkboxGroupInput来子集df并在R Shiny中创建ggplot2

时间:2017-09-27 18:44:51

标签: r shiny

我有一些数据,如下面的示例df所示。有3个美国州(CA,TX,NY)的数据加上总计,并且每个州都有实际的act,预测fct和预测的pred值。

我想创建一个Shiny应用程序,用户可以在其中选择要在绘图上观察的状态。要做到这一点,我正在使用checkboxGroupInput。我在我的代码的服务器部分中有一个名为reactive的{​​{1}}函数,该函数根据用户选择的状态子集DF。然后我有一个名为df的{​​{1}}函数,它创建了创建ggplot所需的所有reactive语句。我这样做的原因是因为我希望每个州保持gl相同,并使用geom_line()来区分实际,预测或预测。

最后,我尝试创建情节,但这就是问题的开始。我没有收到任何错误消息,但是当我运行应用程序时没有显示情节。有没有办法解决这个问题,或者有更好的方法来实现我的目标?下面是我的代码和我想要显示的用户选择所有状态和总计的情节。

color

enter image description here

1 个答案:

答案 0 :(得分:1)

而发生错误

gl

您需要将gl()称为DF <- reactive({ df <- df[,c('Date', names(df)[grep(paste(input$states, collapse='|'), names(df))])] return(tpreg) }) ,因为它是一个被动对象。修好后,

中出现了另一个错误
tpreg

因为该函数中没有return(df)个对象。已将其更改为paste()

然后情节中没有任何内容显示。我想帮助解决剩下的问题,但我从来没有见过任何人library(shiny) library(ggplot2) library(scales) library(lubridate) library(tidyr) df <- data.frame(Date=seq.Date(as.Date('2017-01-01'), as.Date('2017-05-01'), by='month'), CAact=rnorm(5, 10, 2), TXact=rnorm(5, 10, 2), NYact=rnorm(5, 10, 2),Totalact=rnorm(5, 30, 2), CAfct=rnorm(5, 10, 2), TXfct=rnorm(5, 10, 2), NYfct=rnorm(5, 10, 2), Totalfct=rnorm(5, 30, 2), CApred=rnorm(5, 10, 2), TXpred=rnorm(5, 10, 2), NYpred=rnorm(5, 10, 2), Totalpred=rnorm(5, 30, 2) ) df <- gather(df, Variable, Value, -Date) df$State <- gsub('act|fct|pred', '', df$Variable) df$Variable <- gsub('CA|NY|TX|Total', '', df$Variable) df$State <- factor(df$State, levels = c('CA','NY','TX','Total')) ui <- fluidPage( sidebarLayout( sidebarPanel( checkboxGroupInput('states', 'Select Regions', choices=c('CA','TX','NY','Total'), selected=c('CA','TX','NY','Total') ) ), mainPanel( plotOutput('portfolio') ) ) ) server <- function(input, output){ #Function to subset df based on user selected states color.groups <- c(CA = 'green', TX = 'blue', NY = 'red', Total = 'black') line.types <- c(pred = 1, act = 4, fct = 5) #Generate all the 'geom_line' statements to create ggplot #Create ggplot (not working) output$portfolio <- renderPlot({ sub <- subset(df, subset = State %in% input$states) ggplot(sub, aes(x = Date, y = Value, col = State))+ geom_line(aes(linetype = Variable))+ scale_color_manual(values = color.groups)+ scale_linetype_manual(values = line.types) }) } shinyApp(ui, server) 一起情节,所以我不确定是否有效......

更新:

确定。

initialState.js