R中的动画热图

时间:2018-06-19 15:30:02

标签: r animation ggplot2 plotly heatmap

我正在尝试使用ggplot和(可能)plot_ly制作动画热图。到目前为止,我能够实现两个部分目标:

1)我可以使用plot_ly制作动画散点图:

dd <- data.frame(f = rep(1:5, c(rep(50, 5))), 
             x = round(runif(250, 10,100),0),
             y = round(runif(250, 10,100),0),
             id = rep(1:50,5)) 

p <- dd %>%
  plot_ly(
    x = ~x,
    y = ~y,
    frame = ~f,
    type = 'scatter',
    mode = 'markers',
    showlegend = F
  )
p

Animated scatter plot

但是,对于scatter,绘图无法传达有关帧内或帧间重复元素的信息。 (到目前为止,我无法通过选项plot_ly使heatmap正常工作。)

2)我可以使用ggplotstat_bin2d为每个步骤生成热图。

dd.wide <- reshape(dd, direction="wide", timevar = "f")

for (i in seq(2,length(names(dd.wide)),2)){
  p <- ggplot(dd.wide, aes_(x=as.name(names(dd.wide)[i]),y=as.name(names(dd.wide)[i+1]))) +
    stat_bin2d() +
    xlim(10,100) +
    ylim(10,100) +
    guides(fill = guide_colorbar(barwidth = 1, barheight = 5)) +
    scale_fill_gradientn(colours=rev(heat.colors(10)))
  print(p)
}

Step 2 Step 5

对于第二种方法,我没有找到一种简单的方法将这些静态图转换为漂亮的动画(我可以制作快照电影,但我希望图像之间的过渡更为顺畅。)

我也尝试使用ggplotly(),但无法使其正常工作。

对于如何使热图如plot_ly中的散点图那样进行更改,我将不胜感激(我可以使用不同的动画包)。

更新我无法在网站上使用动画散点图,因此我用该点的快照替换了动画。

1 个答案:

答案 0 :(得分:2)

您是否正在寻找这样的东西:

p <- ggplot(data= dd, aes(x = x, y = y)) +
  stat_bin2d(aes(frame = f)) +
  xlim(10,100) +
  ylim(10,100) +
  guides(fill = guide_colorbar(barwidth = 1, barheight = 5)) +
  scale_fill_gradientn(colours=rev(heat.colors(10)))
p <- ggplotly(p)

enter image description here