我正在 R 中开发闪亮的仪表板。但是有两个问题我很难解决。
我想制作一个按国家/地区划分的二氧化碳排放量的交互式图表。虽然从 CSV 文件读取工作正常,并且大多数时候图表也能按预期工作,但存在一个相当特殊的问题。 由于世界上的国家数量超过200个,我决定按首字母对它们进行分组。首先,我选择字母,然后应该出现名称以这些字母开头的国家/地区。如果我选择一个字母,一切都会正常。然而,对于两个字母,仅显示一半的国家/地区。例如,如果字母是 A 和 B,则模式的工作原理如下:
1st from A
3rd from A
5th from A
....
2nd from B
4th from B
6th from B.
如果有三个字母,则仅显示每个第三个国家/地区的复选框,依此类推。另外,如果我取消选择一个字母,以该字母开头的国家/地区的绘图就会消失,而我希望它以这样的方式工作:如果我取消选择一个字母,则所选/取消选择的国家/地区保持不变。
这是我的 R 代码:
library(shiny)
library(ggplot2)
library(dplyr)
emissions <- read.csv("annual-co2-emissions-per-country.csv")
countries <- emissions %>%
filter(code != "")
country_names <- unique(countries[,1])
ui <- fluidPage(
titlePanel("Emissions Dashboard"),
sidebarLayout(
sidebarPanel(
checkboxGroupInput("letters", "Select Letters", choices = unique(substr(country_names, 1, 1))),
uiOutput("country_selection"),
uiOutput("possible_selected")
),
mainPanel(
plotOutput("emissions_plot")
)
)
)
server <- function(input, output, session) {
# Update UI for country selection based on chosen letters
output$country_selection <- renderUI({
if (is.null(input$letters)) return(NULL)
checkboxGroupInput("countries", "Select Countries", choices = country_names[startsWith(country_names, input$letters)])
})
output$possible_selected <- renderPrint({
country_names[startsWith(country_names, input$letters)]
})
# Filter data for the selected countries
filtered_data <- reactive({
if (is.null(input$countries)) return(NULL)
countries %>%
filter(Entity %in% input$countries)
})
# Render the emissions plot
output$emissions_plot <- renderPlot({
req(filtered_data())
ggplot(filtered_data(), aes(x = Year, y = Annual.CO..emissions, color = Entity)) +
geom_line() +
labs(title = "Emissions by Country", x = "Year", y = "Emissions")
})
}
shinyApp(ui = ui, server = server)
好吧,我改正了错误。原因是使用了“startsWith”函数。案件已破。