r - 如何在闪亮的应用程序中呈现 ggplot 标题中的多个值?
问题描述
我在这个 Shinyapp 中的 ggplot 标题有一些问题。我正在比较国家,我希望绘图显示的国家(颜色 = input$stat)也可以在 ggplot 标题中看到。使用当前代码,我只得到第一个。这个问题可能有一个优雅的解决方案吗?
如果我比较法国、英国和西班牙,我希望标题为:“Coronalandskampen, France, The United Kingdom, Spain”
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)
解决方案
所以基本上,你的问题归结为确保:
title = paste0("Coronalandskampen, ", input$stat)
返回字符串"Coronalandskampen, France, The United Kingdom, Spain".
运行时:
> paste0("Coronalandskampen, ", c("A", "B", "C", "D"))
[1] "Coronalandskampen, A" "Coronalandskampen, B"
[3] "Coronalandskampen, C" "Coronalandskampen, D"
我们看到结果是一个包含多个元素的字符向量。该labs
函数仅使用此向量的第一个元素。因此,您需要构建一个字符串。
让我们试试这个:
> paste0("Coronalandskampen, ", paste0(c("A", "B", "C", "D"), collapse = ", "))
[1] "Coronalandskampen, A, B, C, D"
因此,在您的代码中,您可以编写:
title = paste0("Coronalandskampen, ", paste0(input$stat, collapse = ", "))
推荐阅读
- c# - 将数据表的行附加到 Excel 并在 C# 上跳过 Excel 上的某些列
- node.js - fs readFileSync 方法可能引发哪些错误?
- aws-glue - 强制 AWS Glue 爬虫创建多个表
- javascript - Nodejs 在使用 Promise 时阻塞代码。为什么?
- c# - 如何在 ASP.NET Core 3 上通过 IoC 从 FluentValidation 启用 CascadeMode.Stop?
- java - 我可以更改工具栏“主页”图标的大小和位置吗?
- php - 如何将 php 代码中的结果转换为 html 页面
- javascript - JavaScript 交换单选按钮的输入值
- sql-server - SSIS执行SQL不返回结果
- java - 在 Selenium WebDriver 中使用自定义自动化 ID 的最佳实践是什么