R:使用rgl生成可在Web浏览器中查看的3d可旋转图?

时间:2011-10-05 15:42:33

标签: r browser 3d rotation rgl

在R统计软件包的世界中,rgl允许我生成可以用鼠标旋转的3d图。有没有办法可以以便携式格式导出这些图表,将它们加载到网络浏览器或其他第三方工具中并在那里旋转它们?我对Web浏览器解决方案特别感兴趣,因为这样我就可以在内部wiki上共享这些图。

如果rgl不允许这样做,是否有其他库或策略可以让我完成此任务?

6 个答案:

答案 0 :(得分:15)

您可以尝试使用vrmlgen包。它将生成可以使用浏览器插件显示的3d VRML文件;你可以在VRML Plugin and Browser Detector找到一个插件。

安装插件后,请尝试以下操作:

require(vrmlgen)
example(bar3d)

注意:示例代码没有在我的浏览器中自动打开(RStudio,Win7,Chrome),因为路径被破坏了。您可能需要使用:

require(stringr)
browseURL(str_replace_all(file.path(outdir, 'barplot.html'), fixed('\\'), '/'))

如果您不想安装VRML插件,可以使用X3DOM。您需要converter,但您的用户应该只能使用(现代)浏览器查看它们。您可能必须修改以下代码才能使路径正确:

setwd(outdir)
aopt <- 'C:/PROGRA~1/INSTAN~1/bin/aopt' # Path to conversion program
vrml <- 'barplot.wrl'
x3dom <- 'barx.html'
command <- paste(aopt, '-i', vrml, '-N', x3dom)
system(command)
# LOG   Avalon   Init: 47/616, V2.0.0 build: R-21023 Jan 12 2011
# LOG   Avalon   Read url
# LOG   Avalon   Read time: 0.074000
# ============================================
# Call: writeHTML with 1 param 
# Write raw-data to barx.html as text/html
# WARNING   Avalon   Run NodeNameSpace "scene" destructor and _nodeCount == 3
# WARNING   Avalon   Try to remove nodes from parents
# WARNING   Avalon   PopupText without component, cannot unregister
# WARNING   Avalon   Avalon::exitSystem() call and node/obj left: 0/3331
browseURL(file.path(outdir, 'barx.html'))
setwd(curdir)

答案 1 :(得分:13)

对于一个简单的解决方案,试试这个......

x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)

plot3d(x,y,z, 
       col=rainbow(1000),
       type = "s",
       size=1,
       xlab = "x", 
       ylab = "y", 
       zlab = "z",
       box=T)

# This writes a copy into temporary directory 'webGL', and then displays it
browseURL(paste("file://", writeWebGL(dir=file.path("C:/Your-Directory-Here/", "webGL"), width=700), sep=""))

在Firefox或支持HTML5和WebGL的类似浏览器中打开index.html文件

答案 2 :(得分:2)

皮特的建议值得赏心悦目。 wrl-detour并不是必需的,使用sprintf和朋友生成xml文件相当容易。

问题是速度:作为比较,我有一个带有17000个球体(用于体素)的彩色码胃MRI,在我的屏幕上用rgl非常敏感。

当我将它移植到x3dom时,系统冻结了。减少了450个球体的设置:

http://www.menne-biomed.de/uni/x3dsample.html

浏览器支持不一致。 x3dom示例页面上的一些示例最适合(信不信由你)Internet Explorer + Flash 11.检查动态光示例。

我的示例有效,但在Firefox 7.0.1上看起来很平淡。最好是Chrome。

稍后添加: 这是另一个例子:

Stomach3D as Zip

使用Instant Reality Viewer即使使用板载图形也可以显示其中包含的x3d文件。从中生成的html文件有时会加载,但无法旋转。

答案 3 :(得分:1)

要与网页中的图形动态交互,您需要某种类型的java或Flash程序来进行交互,然后让R编写代码/数据,该程序可以理解。 This question and its answers看起来像个好地方。

答案 4 :(得分:1)

为了获得最大的灵活性,我使用处理非常幸运。它最初是用java编写的,但现在已经稳定地移植到 javascript ,并且更实际地移植到python甚至其他几个。

http://processingjs.org
http://processing.org

它使用 HTML5 <canvas>元素即时处理您的处理代码。您可以链接到另一个文件中的可视化代码,也可以直接在html文件中编写(让我想起Sweave!)。

此外,还有大量的在线开源示例资源。例如:

http://openprocessing.org

最后,这里有一个我要用来演示基本设置的要点。只需将processing.js文件下载到与要点相同的文件夹中,然后打开浏览器即可。

https://gist.github.com/1295842

它看起来像这样:

enter image description here

答案 5 :(得分:0)

几百万年前(OK,2005)我编写了R代码来转储Mathematica(!!)图形格式的图形基元,然后可以使用LiveGraphics3D Java插件嵌入和查看。我没有尝试在6年内使用它,但如果有兴趣,我可以尝试复活它。

PS这里是help(package="LG3d")

的结果
get.live.jar            Download live.jar Java archive
LG.display              Display Live3D graphics in a browser
LG.html.head            header and footer files for LiveGraphics HTML
                        files
LGmobius                Draw a 3D mobius strip
LG.open                 open and close LiveGraphics3D files
LG.plot.profiles        Plot likelihood surface + profiles using
                        Live3D
LGtorus                 Draw a torus in LG graphics system
LGtoruswrap             Utility functions for LGtorus
mma.brace               Low-level graphics primitives for
                        LiveGraphics3D
mma.edge                change edge style
mma.persp               Output a perspective plot to a LiveGraphics3D
                        file
mma.point               Medium-level graphics primitives for
                        LiveGraphics3D
mma.polygon             draw a Mma/LG3d polygon