24

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

如果 rgl 不允许这样做,是否有其他库或策略可以让我做到这一点?

4

6 回答 6

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 代替。您需要一个转换器,但您的用户应该能够仅使用(现代)浏览器查看它们。您可能必须修改以下代码以获取正确的路径:

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)
于 2011-10-14T06:09:11.323 回答
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 文件

于 2012-08-08T13:55:10.583 回答
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 作为 Zip

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

于 2011-10-16T15:08:30.763 回答
1

为了获得最大的灵活性,我很幸运地使用了Processing。它最初是用 java 编写的,但现在已经稳定地移植到javascript,并且更多地移植到 python 甚至其他一些。

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

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

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

http://openprocessing.org

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

https://gist.github.com/1295842

它看起来像这样:

在此处输入图像描述

于 2011-10-18T16:26:57.927 回答
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
于 2011-10-05T21:20:25.933 回答
0

rgl软件包现在具有该rglwidget功能,这可能是创建 rgl 图小部件的最简洁和最简单的方法。

于 2021-11-02T08:46:48.913 回答