You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shiny应用的ggplot标题中渲染多个选中国家的值?

解决Shiny中ggplot标题显示多个选中国家的问题

我懂你遇到的麻烦了——当多选国家时,ggplot标题只显示第一个选中的国家,没法把所有选中的都列出来。这是因为input$stat是一个字符向量,直接用paste0拼接的话,它会生成多个独立的字符串,而labs(title = ...)只接受单个字符串作为标题,所以只会取第一个元素。

优雅的解决方案

用基础R的paste()函数结合collapse参数,把所有选中的国家名合并成一个逗号分隔的字符串,再和标题前缀拼接就行。修改labs()里的title部分:

labs(title = paste("Coronalandskampen", paste(input$stat, collapse = ", "), sep = ", "),
     x = "Antal dagar sedan 10:e dödsfallet",
     y = as.name(input$var),
     colour = NULL,
     caption = "Source: European Centre for Disease Prevention and Control")

如果不介意多加载一个包,用glue包能让字符串拼接更直观:

# 先在开头加载glue包
library(glue)

# 修改title部分
labs(title = glue("Coronalandskampen, {paste(input$stat, collapse = ', ')}"),
     x = "Antal dagar sedan 10:e dödsfallet",
     y = as.name(input$var),
     colour = NULL,
     caption = "Source: European Centre for Disease Prevention and Control")

修改后的完整server代码

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, .data[[input$var]], colour = land)) +
 geom_line(size = 1.25) +
 theme_Skane() +
 labs(title = paste("Coronalandskampen", paste(input$stat, collapse = ", "), sep = ", "),
      x = "Antal dagar sedan 10:e dödsfallet",
      y = as.name(input$var),
      colour = NULL,
      caption = "Source: European Centre for Disease Prevention and Control")
 })
}

另外,我把df_graf()[[input$var]]改成了.data[[input$var]],这是ggplot2推荐的动态变量引用方式,更规范也能避免潜在的环境问题。

这样修改后,当你选中法国、英国和西班牙时,标题就会正确显示为Coronalandskampen, France, The United Kingdom, Spain啦。

内容的提问来源于stack exchange,提问作者Henri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:13:13