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

如何用ggplot2按日期或时段统计并可视化事件总数?

嗨,我来帮你搞定用ggplot2绘制事件统计的需求!你的数据结构很清晰,我们分两种场景来实现——按日期统计,以及按一天中的时段统计,还能顺便加一些定制化的细节,让图表更实用好看。

首先,我们先把数据准备好,顺便把时间列转换成ggplot2能友好处理的格式:

library(tidyverse)
library(lubridate)

# 构造你的数据框
df <- tibble(
  Date = as.Date(c("2017-06-16", "2017-06-16", "2017-06-16", "2017-06-16", 
                   "2017-06-17", "2017-06-17", "2017-06-17", "2017-06-17")),
  Heure = c("08:15", "08:20", "08:21", "10:12", "07:10", "07:15", "08:00", "08:45"),
  Event = c("A", "B", "B", "A", "B", "A", "A", "A")
)

# 将Heure转换为时分秒格式(hms),方便后续按时间维度统计
df <- df %>%
  mutate(Heure = hms::as_hms(Heure))

1. 按日期统计事件总数

如果想统计每天的总事件数,我们可以先按日期分组计数,再用柱状图展示:

# 按日期分组统计事件数量
daily_total <- df %>%
  count(Date, name = "Total_Events")

# 绘制每日事件总数柱状图
ggplot(daily_total, aes(x = Date, y = Total_Events)) +
  geom_col(fill = "#2ecc71", alpha = 0.8) + # 自定义填充色和透明度
  labs(title = "每日事件总数统计",
       x = "日期",
       y = "事件总数") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转日期标签,避免重叠

如果想区分不同类型的事件(比如A和B),可以改成并列柱状图:

# 按日期+事件类型分组统计
daily_event_detail <- df %>%
  count(Date, Event, name = "Total_Events")

ggplot(daily_event_detail, aes(x = Date, y = Total_Events, fill = Event)) +
  geom_col(position = "dodge") + # 并列显示不同事件类型的柱子
  labs(title = "每日各类型事件数量统计",
       x = "日期",
       y = "事件总数",
       fill = "事件类型") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

2. 按一天中的时段统计事件总数

这部分我们可以实现类似plot(df$Heure)的效果,但用ggplot2做更灵活的定制:

方式一:按小时统计事件数量

如果想看每个小时的事件分布,可以提取小时信息后分组计数:

# 提取小时,按小时统计事件数
hourly_total <- df %>%
  mutate(Hour = hour(Heure)) %>%
  count(Hour, name = "Total_Events")

ggplot(hourly_total, aes(x = Hour, y = Total_Events)) +
  geom_col(fill = "#3498db", alpha = 0.8) +
  labs(title = "每小时事件总数统计",
       x = "一天中的小时",
       y = "事件总数") +
  theme_minimal() +
  scale_x_continuous(breaks = 0:23) # 显示0-23所有小时刻度

方式二:按细粒度时段绘制分布(类似plot的效果)

如果你想要和plot(df$Heure)类似的时间分布展示,可以用直方图或频率多边形,还能自定义时间间隔:

# 按小时为间隔的直方图
ggplot(df, aes(x = Heure)) +
  geom_histogram(binwidth = 3600, # 3600秒=1小时,按小时分组
                 fill = "#e74c3c", alpha = 0.7) +
  labs(title = "事件在一天中的时段分布(小时间隔)",
       x = "时间",
       y = "事件数量") +
  theme_minimal()

# 按30分钟为间隔的频率多边形
ggplot(df, aes(x = Heure)) +
  geom_freqpoly(binwidth = 1800, # 1800秒=30分钟
                color = "#f39c12", size = 1.2) +
  labs(title = "事件在一天中的时段分布(30分钟间隔)",
       x = "时间",
       y = "事件数量") +
  theme_minimal()

这样你就能根据需求选择不同的展示方式,而且ggplot2的主题、颜色、标签都可以随意调整,完全满足定制化需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:39:07