【发布时间】:2020-06-29 14:01:44
【问题描述】:
我在这个 Shinyapp 中的 ggplot 标题有一些问题。我正在比较国家,我希望绘图显示的国家(颜色 = input$stat)也可以在 ggplot 标题中看到。使用当前代码,我只得到第一个。这个问题是否有一个优雅的解决方案?
如果我比较法国、英国和西班牙,我希望标题为: "Coronalandskampen,法国,英国,西班牙"
library(tidyverse)
library(readxl)
library(httr)
library(zoo)
library(caTools)
library(shiny)
library(data.table)
#Get data
url <- paste("https://www.ecdc.europa.eu/sites/default/files/documents/COVID-19-geographic-disbtribution-worldwide-",format(Sys.time(), "%Y-%m-%d"), ".xlsx", sep = "")
GET(url, authenticate(":", ":", type="ntlm"), write_disk(tf <- tempfile(fileext = ".xlsx")))
df <- read_excel(tf)
df <- df %>%
rename(land = countriesAndTerritories,
`Antal fall` = cases,
`Antal döda` = deaths) %>%
arrange(land, dateRep) %>%
group_by(land) %>%
mutate(`Antal döda, kumulativt` = cumsum(`Antal döda`),
`Antal fall, kumulativt` = cumsum(`Antal fall`)) %>%
ungroup() %>%
filter(`Antal döda, kumulativt` > 10) %>%
group_by(land) %>%
mutate(antal_dagar = row_number(),
start_datum = min(dateRep),
`Antal Fall, rullande medeltal över sju dagar` = rollmean(`Antal fall`, 7, fill = NA),
`Antal döda, rullande medeltal över sju dagar` = rollmean(`Antal döda`, 7, fill = NA)) %>%
ungroup() %>%
mutate(`Döda per 100 000 invånare` = `Antal döda, kumulativt` * 100000 / popData2019) %>%
select(land, antal_dagar, `Antal fall`, `Antal fall, kumulativt`, `Antal döda`, `Antal döda, kumulativt`, `Döda per 100 000 invånare`,
`Antal Fall, rullande medeltal över sju dagar`, `Antal döda, rullande medeltal över sju dagar`, start_datum, geoId)
ui <- fluidPage(
navbarPage("Statistik Covid-19",
sidebarLayout(
sidebarPanel(
selectInput("stat", "Välj länder:", choices = unique(df$land), selected = "Sweden", multiple = TRUE),
varSelectInput("var", "Variabel:", df[c(3,4,5,6,7, 8, 9)])),
mainPanel(plotOutput("covid"))
)))
server <- function(input, output, session) {
df_graf <- reactive({df %>%
req(input$stat) %>%
filter(land %in% input$stat)
})
output$covid <- renderPlot({
ggplot(df_graf(), aes(antal_dagar, df_graf()[[input$var]], colour = land)) +
geom_line(size = 1.25) +
theme_Skane() +
labs(title = paste0("Coronalandskampen, ", input$stat),
x = "Antal dagar sedan 10:e dödsfallet",
y = as.name(input$var),
colour = NULL,
caption = "Source: European Centre for Disease Prevention and Control")
})
}
shinyApp(ui, server)
【问题讨论】: