r - 使用 plotly 跨动画帧的恒定热图
问题描述
我想创建一个动画人物,其中热图作为“背景”。也就是说,我希望热图在各个帧中保持不变。
到目前为止,这是我的代码:
library(plotly)
library(dplyr)
df1 <- data.frame(f = rep(1:5, c(rep(50, 5))),
x = round(runif(250, 10,100),0),
y = round(runif(250, 10,100),0))
df2 <- expand.grid(x=seq(0,100,10), y=seq(0,100,10))
df2$col[df2$x>50] = "green"
df2$col[df2$x<=50] = "red"
df2$col[df2$x<=20] = "blue"
plot_ly() %>%
plotly::add_markers(data = df1, y = ~y,x = ~x,frame=~f)%>%
plotly::add_heatmap(data = df2,
x = ~x,
y = ~y,
z = as.numeric(factor(df2$col, ordered = T, levels = unique(df2$col))),
xgap = 0.5,
ygap = 0.5)
生产:
我可以创建地图,在第 1 帧上一切看起来都很好。但是,当我向前移动一帧时,热图消失了。有人对此有解决方案吗?
顺便说一句, ggplotly 不是一个选项,因为 plotly 和 heatmap 的组合太慢了。
解决方案
您是否尝试过df2
按帧数重复对象?尽管重建热图会导致帧之间出现明显的延迟,但以下是一个潜在的解决方案:
# repeat df2 five times
df2 = do.call("rbind", replicate(5, df2, simplify = FALSE))
df2$f = rep(1:5, each = nrow(df2)/5)
plot_ly() %>%
plotly::add_markers(data = df1, y = ~y,x = ~x,frame=~f)%>%
plotly::add_heatmap(data = df2,
x = ~x,
y = ~y,
frame=~f,
z = as.numeric(factor(df2$col, ordered = T, levels = unique(df2$col))),
xgap = 0.5,
ygap = 0.5)
推荐阅读
- python - 如何从我的 python 应用程序将用户名和密码存储在 SQLite 数据库中?
- c# - 使用 TAP 进行多任务处理
- xml - 计算父元素并在字符串 XSLT 2 中返回它们
- r - 为ggplot2中的每个图例分配不同的背景颜色
- python - 如何继承 Odoo 12 中的 One2many 字段?
- python - 如何使用 Python 从一行文本中提取所需的文本?
- java - 在不导致消息排队的情况下降低 Kafka 消费者的吞吐量?
- c# - 后台服务中的 Task.Run 意外停止工作
- flutter - Firebase数据不会在flutter中没有热重载的情况下加载
- c++ - 我们可以在菱形继承模式中只使用一种虚拟继承吗?