在R统计软件包的世界中,rgl允许我生成可以用鼠标旋转的3d图。有没有办法可以以便携式格式导出这些图表,将它们加载到网络浏览器或其他第三方工具中并在那里旋转它们?我对Web浏览器解决方案特别感兴趣,因为这样我就可以在内部wiki上共享这些图。
如果rgl不允许这样做,是否有其他库或策略可以让我完成此任务?
答案 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。
稍后添加: 这是另一个例子:
使用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!)。
此外,还有大量的在线开源示例资源。例如:
最后,这里有一个我要用来演示基本设置的要点。只需将processing.js文件下载到与要点相同的文件夹中,然后打开浏览器即可。
https://gist.github.com/1295842
它看起来像这样:
答案 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