Как отобразить графически визуализации в блестящее приложение - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь создать блестящее приложение для отслеживания деталей о распространении Covid 19 в двух странах. Я использую shiny, чтобы установить весь контент и сюжетно включить Dynami c и интерактивную графику. Я выяснил некоторые возможные решения этой проблемы, но я не уверен, что это происходит. Используемый фрейм данных - df2, чью dput версию я включаю в последнюю часть этого поста.

В приложении все выглядит нормально, с filtered вводом для визуализации plotly, но в конце, когда я компилировал приложение, я получил эту ошибку:

Listening on http://127.0.0.1:3082
Warning: Error in : Result must have length , not 0

Это код моего приложения:

#Shiny app design
library(shiny)
library(ggplot2)
library(dplyr)
library(httr)
library(reshape2)
library(tidyr)
library(stringr)
library(plotly)
# Set colors
confirmed_color <- "purple"
active_color <- "#1f77b4"
recovered_color <- "forestgreen"
death_color <- "red"
#Data put here dput version of df2
df2 <- ...
#App design
#ui design
ui <- fluidPage(titlePanel("Corona Virus Tracker"),
                sidebarLayout(
                  sidebarPanel("Choose your country",
                               uiOutput("countryOutput")),
                  mainPanel(plotOutput("coolplot"))
                ))

#server design
server <- function(input, output) {
  output$countryOutput <- renderUI({
    selectInput("countryInput", "Country",
                sort(unique(df2$country)),
                selected = "Albania")
  })
  filtered <- reactive({

    filtered <- df2 %>%
      filter(country == input$countryInput)
    filtered <- as.data.frame(filtered)
  })

  output$coolplot <- renderPlotly({
    #First plot design
    plotly::plot_ly(data = filtered()) %>%
      plotly::add_trace(
        x = ~Date,
        # y = ~active_cum,
        y = ~confirmed_cum,
        type = "scatter",
        mode = "lines+markers",
        # name = "Active",
        name = "Confirmed",
        line = list(color = active_color),
        marker = list(color = active_color)
      ) %>%
      plotly::add_trace(
        x = ~Date,
        y = ~death_cum,
        type = "scatter",
        mode = "lines+markers",
        name = "Death",
        line = list(color = death_color),
        marker = list(color = death_color)
      ) %>%
      plotly::layout(
        title = "",
        yaxis = list(title = "Cumulative number of cases"),
        xaxis = list(title = "Date"),
        legend = list(x = 0.1, y = 0.9),
        hovermode = "compare"
      )


  })
}
shinyApp(ui = ui, server = server)

dput версия моих данных df2 следующий:

df2 <- structure(list(Date = structure(c(18316, 18317, 18318, 18319, 
18320, 18321, 18322, 18323, 18324, 18325, 18326, 18327, 18328, 
18329, 18330, 18331, 18332, 18333, 18334, 18335, 18336, 18337, 
18338, 18339, 18340, 18341, 18342, 18343, 18344, 18345, 18346, 
18347, 18348, 18330, 18331, 18332, 18333, 18334, 18335, 18336, 
18337, 18338, 18339, 18340, 18341, 18342, 18343, 18344, 18345, 
18346, 18347, 18348), class = "Date"), confirmed = c(1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 5L, 7L, 7L, 
7L, 11L, 16L, 21L, 22L, 22L, 22L, 24L, 24L, 40L, 40L, 74L, 84L, 
94L, 110L, 2L, 10L, 12L, 23L, 33L, 38L, 42L, 51L, 55L, 59L, 64L, 
70L, 76L, 89L, 104L, 123L, 146L, 174L, 186L), deaths = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 2L, 4L, 4L, 
0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 4L, 5L, 
5L, 6L, 8L), recovered = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 2L, 2L, 2L, 10L, 17L, 17L, 31L), unrecovered = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 5L, 7L, 
7L, 7L, 11L, 16L, 21L, 22L, 22L, 22L, 24L, 24L, 39L, 39L, 73L, 
82L, 90L, 106L, 2L, 10L, 11L, 22L, 32L, 37L, 41L, 50L, 54L, 57L, 
62L, 68L, 74L, 87L, 100L, 118L, 141L, 168L, 178L), country = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L), .Label = c("Afghanistan", "Albania"), class = "factor"), 
    active = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 4L, 4L, 5L, 7L, 7L, 7L, 11L, 16L, 21L, 22L, 22L, 22L, 
    24L, 24L, 39L, 39L, 73L, 82L, 90L, 106L, 2L, 10L, 11L, 22L, 
    32L, 37L, 41L, 50L, 54L, 57L, 62L, 68L, 74L, 87L, 100L, 118L, 
    141L, 168L, 178L), confirmed_cum = c(1L, 2L, 3L, 4L, 5L, 
    6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 17L, 21L, 26L, 33L, 40L, 
    47L, 58L, 74L, 95L, 117L, 139L, 161L, 185L, 209L, 249L, 289L, 
    363L, 447L, 541L, 651L, 2L, 12L, 24L, 47L, 80L, 118L, 160L, 
    211L, 266L, 325L, 389L, 459L, 535L, 624L, 728L, 851L, 997L, 
    1171L, 1357L), death_cum = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 1L, 2L, 3L, 5L, 9L, 13L, 0L, 0L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 9L, 11L, 13L, 15L, 17L, 21L, 26L, 
    31L, 37L, 45L), active_cum = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 
    8L, 9L, 10L, 11L, 12L, 13L, 17L, 21L, 26L, 33L, 40L, 47L, 
    58L, 74L, 95L, 117L, 139L, 161L, 185L, 209L, 248L, 287L, 
    360L, 442L, 532L, 638L, 2L, 12L, 23L, 45L, 77L, 114L, 155L, 
    205L, 259L, 316L, 378L, 446L, 520L, 607L, 707L, 825L, 966L, 
    1134L, 1312L)), row.names = c(NA, 52L), class = "data.frame")

Большое спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

Изменить

mainPanel(plotOutput("coolplot"))

на

mainPanel(plotlyOutput("coolplot"))

Результат

plotly

As Ben предложение , вы также можете изменить

filter(country == input$countryInput)

на

filter(country == req(input$countryInput))
0 голосов
/ 29 марта 2020

Я считаю, что у вас нет опции по умолчанию для фильтра, поэтому при запуске приложения оно пытается пропустить пустой фрейм данных. Вы можете использовать оператор if, чтобы проверить, имеет ли значение input $ countryInput значение, и если нет, то что должно произойти. Добавленные 2 строки исправляют ошибку для меня. Надеюсь, это поможет. enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...