我正在构建一个ShinyApp来显示COVID-19数据。我有一个长格式的文件,显示日期,县,阳性病例,恢复和死亡。我正在尝试制作一个应用程序,使用户可以从下拉菜单中选择一个县,并且它将在页面上显示3张阳性,回收率和死亡率图表。这些图的x轴为日期,y轴为变量。附件是我到目前为止的脚本。我尝试了许多不同的方法,但是我不知道该怎么做。我仍在学习R,并且没有使用ShinyApp的经验。任何建议或帮助,将不胜感激。我认为我对ggPlot和output / UI拥有正确的权利,服务器逻辑正是使我陷入困境的原因。即使只是指向一个好的指南的链接也会很不错。谢谢!
7/23/2020:我已经更新了代码。我在ggplot中看了一些。当我运行该应用程序时,我现在有了所需的下拉菜单,但正在显示图形。当我在控制台中创建ggplot以确保代码能够独立运行时,我缺少了图表的中间属性吗?有任何想法/解决方法吗?
library(shiny)
library(dplyr)
library(tidyr)
library(plotly)
library(ggplot2)
library(rsconnect)
df <- read.csv("C:/Users/Nathan May/Desktop/Research Files (ABI)/Covid/Data For Shiny/Appended_File/Appended_Scraped_Files.csv") #INSERT PATH SINGLE FILE OPTION
datapos <- df[c(2,6,3)]
rsconnect::setAccountInfo(name='nathanjmay', token='A3CF4CC3DE0112B8B9F8D0BA429223D3', secret='TNwC9hxwZt+BffOhFaXD3FQsMg3eQnfaPGr0eE8S')
#UI
ui <- fluidPage(
titlePanel("COVID-19 in Arkansas Counties"),
fluidRow(
column(
width=4,
selectizeInput("County", label=h5("County"), choices= data$Counties, width="100%")
)),
fluidRow(
plotOutput(outputId = "Positive")
),
fluidRow(
plotOutput(outputId = "Recoveries")
),
fluidRow(
plotOutput(outputId = "Deaths")
),)
#SERVER
server= function(input, output) {
data <- reactive({
datapos %>% filter(County == input$County)
#GGPLOT2 for Positive
output$Positive -> renderPlot(ggplot(data=datapos, aes(x=Day, y=Positive)) +
geom_bar(stat="identity"))
#Recoveries
output$Recoveries -> renderplot()
#Deaths
output$Deaths -> renderplot()
})
}
shinyApp(ui=ui, server=server)
答案 0 :(得分:0)
您正在将所有反应式表达式分配给服务器逻辑中的data
对象,请看一下在大括号处的位置。因此,所有内容都包裹在data
中,而您的plotOutput
,即output$Positive
,output$Recoveries
,output$Death
中没有任何内容在您的服务器逻辑中指定。同样,使用reactive()
的方式一开始会有些尴尬。这是我的超级简单应用程序,用于说明您使用reactive()
时应该做的事情。再次注意打开和关闭大括号和括号的位置。
因此,此处定义的反应链为:input$state
>> dat
通过reactive()
>> output$dummy
通过renderPlot()
。
library(shiny)
library(dplyr)
library(ggplot2)
#### Fake data
df <- data.frame(state = rep(c("FL", "GA"), each = 2),
x = rnorm(4),
y = rnorm(4))
#### UI
ui <- fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
selectInput("state", "Choose a state:",
list(`Florida` = "FL",
`Georgia` = "GA")
),
mainPanel(
plotOutput("dummy")
)
)
)
#### Server
server <- function(input, output) {
## Essential dat is the filtered df
dat <- reactive({
df %>%
filter(state == input$state)
})
## Use dat() to access the filtered df instead of dat
output$dummy <- renderPlot({
ggplot(dat()) +
geom_point(aes(x = x, y = y))
})
}
# Run the application
shinyApp(ui = ui, server = server)