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

如何在R中利用给定数据集创建按时间(月/年)统计的散点图

解决按月统计盗窃次数的散点图问题

问题根源

你之前的代码生成平线是因为:

  • 原始代码中y = offense用的是字符型变量,所有数据的offense值都是Motor Vehicle Theft,ggplot会将其视为单一离散值,导致所有点堆叠在同一水平线上。
  • 你尝试转换offense的方式有误:seattle_thefts$offense <- mutate(...) 错误地将整个数据框赋值给单个列,正确的赋值应该更新整个数据框,不过其实这一步完全可以省略。

正确实现步骤

我们需要先按月聚合数据,统计每个月的盗窃次数,再基于聚合后的数据绘制散点图:

  1. 加载所需包
library(dplyr)
library(lubridate)
library(ggplot2)
  1. 按月聚合盗窃次数
    用floor_date将时间戳转换为当月第一天,再统计每个月的事件数量:
monthly_thefts <- seattle_thefts %>%
  # 提取每个事件对应的月份
  mutate(month = floor_date(report_date_time, "month")) %>%
  # 按月份分组,统计次数
  count(month, name = "sum_of_thefts")

或者用group_by + summarize的写法,效果完全一致:

monthly_thefts <- seattle_thefts %>%
  group_by(month = floor_date(report_date_time, "month")) %>%
  summarize(sum_of_thefts = n()) # n()直接统计组内行数,无需提前转换offense
  1. 绘制散点图
    基于聚合后的数据集,x轴为月份,y轴为当月盗窃次数:
ggplot(monthly_thefts, aes(x = month, y = sum_of_thefts)) +
  geom_point(size = 3) + # 可根据需求调整点的大小
  labs(
    x = "月份",
    y = "机动车盗窃次数",
    title = "西雅图每月机动车盗窃次数统计"
  ) +
  theme_minimal() # 可选主题,让图表更美观

额外说明

如果想展示每日/每个时间点的事件,同时x轴按月划分,可以直接用原始数据,但需要将x轴按月份格式化:

ggplot(seattle_thefts, aes(x = report_date_time, y = 1)) +
  geom_point() +
  scale_x_datetime(date_breaks = "1 month", date_labels = "%Y-%m") +
  labs(x = "月份", y = "事件标记", title = "西雅图机动车盗窃事件时间分布")

但这种方式仅展示事件存在性,无法直观体现每月次数,所以优先推荐聚合后绘制散点图的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:42:41