从Plotly 3D图表中创建视频

6
我想知道是否有一种方法可以将Plotly 3D图表导出为视频(更具体地说,是否可以原生地完成或需要特别处理)?
导出静态图像很简单,对于嵌入到HTML等中的交互式图表也可以进行导出。
假设我有一个希望慢慢旋转的3D图表,如果图像可以按照给定的间隔旋转、拍摄图像,然后无限地旋转,可能会很直接 - 但我想知道这是否被原生支持?
有人知道好的解决策略吗?
最好的解决方案是针对R / RStudio,但由于Plotly是跨平台的,因此可考虑任何解决方案。

2
尽管对问题进行投反对票是完全合法的...但如果能提供一个建设性的评论,说明为什么需要这样做,我会非常感激。 - Joe Healey
你可以看一下 caTools 包。我不认为它能与 plotly 一起使用,但你可以用它来制作 GIF。 - Vandenman
1
我没有给你的问题点踩,但我猜可能是因为你的问题看起来像是可以通过谷歌搜索解决的。有很多可以从绘图中创建动画的包:rgl 包中的 movie3dgganimate 包。这两个包都依赖于 imagemagick,所以你可能也需要安装它。 - DeveauP
3
我已经搜索了解决方法,包括深入研究plotly网页。只有当谷歌没有找到答案(或者我自己找不到)时,我才会在SO上发问题。 在这个特定的情况下,我想问是否有人更熟悉plotly并知道一些定制函数,所以我认为这不是“让我来谷歌一下”这种情况......那些负评似乎过早而且不必要。 不过,我会研究 gganimate,因为它听起来很有希望,由于plotly依赖于ggplot。 - Joe Healey
1个回答

5

供以后参考:

能够迭代多个视角的关键在于相机控制“眼睛”,plotly帮助中心指向了这一点:

https://plot.ly/r/reference/#layout-scene-camera

camera = list(eye = list(x = 1.25, y = 1.25, z = 1.25))) #1.25 is default

这个问题已经在这里得到了回答,但是搜索我的具体查询并没有找到它:

在此处输入链接描述

我在脚本中使用了一个for循环来传递迭代器给三角函数,绘制相机坐标的圆形,并在每一步呈现出一幅新图像。

(x,y) = cos(theta) + sin(theta)

在此输入图片描述

最终代码如下:

# assume dataset read in, manipulated and given as a matrix in "matrix"
matrix.list <- list(x = temp, y = scan, z = matrix)

font.pref <- list(size=12, family="Arial, sans-serif", color="black")

x.list <- list(title = "X", titlefont = font.pref)
y.list <- list(title = "Y", titlefont = font.pref)
z.list <- list(title = "Z",titlefont = font.pref)

zoom <- 2

for(i in seq(0,6.3,by=0.1){
# 6.3 is enough for a full 360 rotation

 outfile <- paste(file,"plot",i, sep = "_")
 graph <- plot_ly(matrix.list, x = temp, y = scan, z = z,
                  type="surface") %>%
                  layout(scene=list(xaxis = x.list,
                                    yaxis = y.list,
                                    zaxis = z.list,
                                    camera = list(eye = list(x = cos(i)*zoom, y = sin(i)*zoom, z= 0.25))))

# The above camera parameters should orbit 
# horizontally around the chart.
# The multiplier controls how far out from
# from the graph centre the camera is (so 
# is functionally a 'zoom' control).

  graph
  plotly_IMAGE(graph, username="xxx", key="xxx",
               out_file = paste(outfile,"png", sep="."))
}

NB 文件数量和分辨率可能占用相当大的空间。

NB 2 在建立这个过程中,我忘记了plotly的免费API限制你每天最多只能使用50个API调用。因此,如果您想呈现视频,请相应地调整帧等...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接