我有一些数据,如下面的示例df
所示。有3个美国州(CA,TX,NY)的数据加上总计,并且每个州都有实际的act
,预测fct
和预测的pred
值。
我想创建一个Shiny应用程序,用户可以在其中选择要在绘图上观察的状态。要做到这一点,我正在使用checkboxGroupInput
。我在我的代码的服务器部分中有一个名为reactive
的{{1}}函数,该函数根据用户选择的状态子集DF
。然后我有一个名为df
的{{1}}函数,它创建了创建ggplot所需的所有reactive
语句。我这样做的原因是因为我希望每个州保持gl
相同,并使用geom_line()
来区分实际,预测或预测。
最后,我尝试创建情节,但这就是问题的开始。我没有收到任何错误消息,但是当我运行应用程序时没有显示情节。有没有办法解决这个问题,或者有更好的方法来实现我的目标?下面是我的代码和我想要显示的用户选择所有状态和总计的情节。
color
答案 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