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

如何在RStudio中用Shiny制作UFO目击数据交互式ggplot绘图

实现方案

前置修正点

你现有代码存在2个基础问题需要先调整:

  • 输入ID大小写不匹配:UI中选择器的ID定义为Country(首字母大写),Server中调用时需要写input$Country,你原来写的input$country会取不到值
  • 需提前加载dplyr包用于数据过滤,同时建议把数据集读取逻辑放在Server代码外全局位置,避免每次绘图都重复读取数据

完整修改后代码

ui.r 代码(基本无改动,仅补充包引入和中文适配)

library(shiny)
library(ggplot2)
library(dplyr)

shinyUI(fluidPage(
    titlePanel("UFO目击记录分析"),
    sidebarLayout(
        sidebarPanel(
            selectInput("Country",
                        "选择展示国家:",
                        choices = list("美国" = 'USA',
                                       "加拿大" = 'CANADA'),
                        )
        ),
        mainPanel(
            plotOutput("ufoPlot")
        )
    )
))

server.r 代码

library(shiny)
library(ggplot2)
library(dplyr)

# 提前读取数据集,这里替换为你实际的数据集读取路径
ufo_data_filter <- read.csv("你的UFO数据集路径.csv", stringsAsFactors = FALSE)

shinyServer(function(input, output) {
    output$ufoPlot <- renderPlot({
        # 筛选对应国家的数据,同时去掉形状为空的无效记录
        filtered_data <- ufo_data_filter %>% 
          filter(Country == input$Country, !is.na(Shape)) %>% 
          # 按UFO形状分组,统计每个形状的目击次数
          count(Shape, name = "sight_count")
        
        # 生成柱状图
        ggplot(filtered_data, aes(x = Shape, y = sight_count)) +
          geom_col(fill = "#2c3e50", alpha = 0.8) +
          labs(x = "UFO形状", y = "目击次数", title = paste0(input$Country, " UFO不同形状目击次数统计")) +
          theme_bw() +
          # X轴标签旋转45度,避免文字重叠
          theme(axis.text.x = element_text(angle = 45, hjust = 1))
    })
})

功能说明

  • 侧边栏切换国家选项后,绘图会自动更新对应国家的统计结果
  • 自动合并同形状的目击记录计数,无需提前做数据聚合
  • 针对X轴标签可能过长的问题做了旋转优化,展示更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 20:15:09