ShinyAPP Covid数据(如何过滤和排序?)

时间:2020-07-18 23:24:38

标签: r ggplot2 shinyapps

我正在构建一个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)

1 个答案:

答案 0 :(得分:0)

您正在将所有反应式表达式分配给服务器逻辑中的data对象,请看一下在大括号处的位置。因此,所有内容都包裹在data中,而您的plotOutput,即output$Positiveoutput$Recoveriesoutput$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)