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

如何解决大数据下geom_raster与ggplotly无法渲染的问题

解决ggplot2热力图转plotly无法渲染的问题

问题根源

你的代码中hm列是字符型的时间字符串(如"00:00"),plotly对离散型y轴的geom_raster转换存在兼容性问题,导致无法正常渲染;同时geom_raster的矩形块逻辑在plotly中的映射机制和ggplot原生有差异。

可行解决办法

方案一:将y轴转为数值型时间(推荐)

把时间转换为一天中的分钟数(0-1439),让plotly处理连续型轴,渲染更稳定,同时自定义刻度标签还原时间格式:

library(dplyr)
library(lubridate)
library(ggplot2)
library(plotly)   

data <- tibble(ts = seq(as.POSIXct("2024-01-07 00:00:00", tz="GMT"), 
                        length.out=10080, by='1 min'),
               status = sample(x = c("Status A", "Status B", "Status C"), 
                               prob = c(.6, .3, .1),
                               size = 10080, 
                               replace = TRUE)
) |>
  mutate(date = as_date(ts)) |>
  # 转换为一天内的分钟数,作为数值型y轴
  mutate(minute_of_day = hour(ts)*60 + minute(ts)) |>
  select(-ts)

# 绘制ggplot,自定义y轴刻度
gg_heatmap <- ggplot(data = data, aes(x = date, y = minute_of_day, fill = status)) +
  geom_raster() +
  scale_y_continuous(
    breaks = seq(0, 1439, 360),  # 每6小时一个刻度
    labels = function(x) sprintf("%02d:00", x %/% 60),  # 转换为HH:00格式
    ylab = "Time"
  )

# 转换为plotly,可正常渲染
ggplotly(gg_heatmap)

方案二:替换geom_raster为geom_tile

geom_tile在plotly中的兼容性更好,只需指定宽高确保块对齐:

# 复用原数据处理流程(保留hm字符列)
data <- tibble(ts = seq(as.POSIXct("2024-01-07 00:00:00", tz="GMT"), 
                        length.out=10080, by='1 min'),
               status = sample(x = c("Status A", "Status B", "Status C"), 
                               prob = c(.6, .3, .1),
                               size = 10080, 
                               replace = TRUE)
) |>
  dplyr::mutate(date = lubridate::as_date(ts)) |>
  dplyr::mutate(hm = format(ts, "%H:%M")) |>
  dplyr::select(-ts)

# 用geom_tile替代geom_raster,指定宽高
gg_heatmap_tile <- ggplot(data = data, aes(x = date, y = hm, fill = status)) +
  geom_tile(width = 1, height = 1)

ggplotly(gg_heatmap_tile)

额外提示

确保你的plotly包是最新版本,旧版本可能存在geom_raster的转换bug,可通过update.packages("plotly")更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:43:38