我正在构建一个闪亮的应用程序来显示 COVID-19 数据。我有一个长格式的文件,显示日期、县、阳性病例、康复和死亡人数。我正在尝试制作一个应用程序,用户可以从下拉菜单中选择一个县,它将在页面上显示 3 个阳性、康复和死亡图表。图表的 x 轴为日期,y 轴为变量。附件是我到目前为止的脚本。我尝试了很多不同的方法,但我不知道该怎么做。我仍在学习 R,之前没有使用 ShinyApp 的经验。 我想我的 ggplot 和输出/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)
您将所有反应式表达式分配给服务器逻辑中的
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)