R散点图时间日期轴按时段划分排序及数据呈现优化问询
R散点图时间/日期轴自定义时段分组实现方案
你的需求完全可以实现,核心逻辑是先对原始时间、日期字段做自定义分箱分组,再将分组后的字段映射到ggplot坐标轴即可,以下是具体实现步骤和代码示例:
先修正现有代码的语法问题
你当前的代码存在逻辑错误,把读取的数据集变量accident覆盖成了ggplot绘图对象,后续无法再做数据处理,先调整基础代码:
# 提前安装所需依赖包:tidyverse、lubridate library(tidyverse) library(lubridate) # 读取原始数据 accident <- read.csv("accidents.csv", header = TRUE)
实现方案1:将同时段数据聚合到分类轴显示
如果需要把属于同一时段的所有点都归到同一个坐标轴分类下,可先对原始字段做分箱处理:
第一步:自定义时间字段分箱
accident <- accident %>% # 先把Time列转成时分秒格式,可根据原始数据格式调整解析参数 mutate(Time = hms::as_hms(Time), # 按需求自定义时段分组,规则可自行修改 time_group = case_when( # 12:00-19:59、21:00-23:59划为同一时段 (Time >= hms("12:00:00") & Time <= hms("19:59:59")) | (Time >= hms("21:00:00") & Time <= hms("23:59:59")) ~ "目标时段", # 20:00-20:59单独归为一个时段 Time >= hms("20:00:00") & Time <= hms("20:59:59") ~ "晚间过渡时段", # 剩余0:00-11:59归为早间时段 TRUE ~ "早间时段" ), # 调整因子顺序,控制坐标轴的显示顺序 time_group = factor(time_group, levels = c("早间时段", "目标时段", "晚间过渡时段")))
第二步:自定义日期字段分箱
和时间字段逻辑一致,以下是按工作日/休息日分组的示例,可自行调整为按周、旬、自定义日期区间等规则:
accident <- accident %>% # 先把Date列转成日期格式,可根据原始数据格式调整解析参数 mutate(Date = ymd(Date), date_group = case_when( wday(Date, week_start = 1) <=5 ~ "工作日", TRUE ~ "休息日" ), # 调整因子顺序控制y轴显示顺序 date_group = factor(date_group, levels = c("工作日", "休息日")))
第三步:绘制分组后的散点图
ggplot(data=accident)+ geom_point(mapping=aes(x=time_group, y=date_group), alpha=0.5)
实现方案2:保留连续轴刻度,仅自定义分组标签
如果不需要聚合同时段的点,只是要在连续的时间/日期轴上标注分组区间,不需要修改原始数据,直接调整坐标轴参数即可:
ggplot(data=accident)+ geom_point(mapping=aes(x=Time, y=Date), alpha=0.5)+ # 自定义x轴时间分组标签 scale_x_time(breaks = c(hms("00:00:00"), hms("12:00:00"), hms("20:00:00"), hms("21:00:00")), labels = c("0:00-11:59", "12:00-19:59", "20:00-20:59", "21:00-23:59"))
原代码生成的散点图参考

注意:如果你的原始时间、日期存储格式和示例不符,需要调整ymd、hms对应的日期时间解析参数
内容的提问来源于stack exchange,提问作者user17160030
相关产品推荐
相关产品推荐

