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

如何在ggplot2中偏移时间X轴(小时)优化昼夜热力图展示

解决方案

无需修改原始数据集,通过临时调整X轴映射和自定义刻度即可实现需求:

修改后的代码

MB_tile <- readr::read_csv('MB/MB_all_nonsong_tile.csv')
sunrise_setMB <- readr::read_csv('MB/MB_rise_set2.csv')

ggplot()+
  # 临时转换热力图X值:0-6点转为24-30(避免修改原始数据)
  geom_tile(data = MB_tile,
            aes(x = ifelse(Time < 7, Time + 24, Time), 
                y = as.Date(Date, format = "%m/%d/%Y"),
                fill = Value), 
            show.legend = FALSE)+
  scale_fill_gradient(low = 'white', high = 'black')+
  # 同步转换日出日落点的X值
  geom_point(data = sunrise_setMB, 
             aes(x = ifelse(rise_set < 7, rise_set + 24, rise_set), 
                 y = as.Date(days, format = "%m/%d/%Y"),
                 color = label),
             show.legend = FALSE)+
  ggtitle("MB Presence")+
  theme(plot.title = element_text(hjust = 0.5)) + 
  xlab('Time') + ylab('Date')+
  # 自定义X轴刻度与范围
  scale_x_continuous(
    limits = c(7, 31),
    breaks = c(7:24, 24:30),
    labels = c(paste0(sprintf("%02d", 7:24), ":00"), paste0(sprintf("%02d", 0:6), ":00")),
    oob = scales::oob_keep  # 保留所有数据点,防止截断
  )

核心逻辑

  1. 临时数值转换:通过ifelse在绘图映射时将0-6点的时间加24,使其落在7点之后的数值区间,无需修改原始数据
  2. X轴刻度自定义:设置显示范围为7到31,将转换后的数值对应到实际时间标签,实现07:00到次日06:00的轴显示
  3. 数据保留:oob = scales::oob_keep确保所有转换后的数据点(包括24-30区间)都能正常显示,不会被坐标轴范围截断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:10:33