如何在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
相关产品推荐
相关产品推荐

