R: en utilisant rgl pour générer des tracés 3D rotables qui peuvent être consultés dans un navigateur web?
dans le monde du paquet de statistiques R, rgl me permet de générer des tracés 3d que je peux tourner avec ma souris. Y a-t-il un moyen que je puisse exporter ces parcelles dans un format portable, les charger dans un navigateur web ou un autre outil tiers et les tourner là? Je suis particulièrement intéressé par la solution de navigateur web car cela me permettra de partager les tracés sur un wiki interne.
si rgl ne permet pas cela, y a-t-il d'autres bibliothèques ou stratégies qui permettraient moi, pour accomplir cette?
6 réponses
vous pouvez essayer le paquet vrmlgen
. Il va produire des fichiers VRML 3d qui peuvent être affichés avec un plugin de navigateur; vous pouvez trouver un plugin à VRML Plugin et Détecteur de navigateur .
une fois que vous avez installé un plugin, essayez ceci:
require(vrmlgen)
example(bar3d)
NB: le code de l'exemple ne s'est pas ouvert automatiquement dans un navigateur pour moi (RStudio, Win7, Chrome) parce que le chemin a été coupé. Vous pourriez avoir besoin d'utiliser:
require(stringr)
browseURL(str_replace_all(file.path(outdir, 'barplot.html'), fixed('\'), '/'))
si vous ne voulez pas installer un plugin VRML, vous pouvez utiliser X3DOM à la place. Vous aurez besoin d'un convertisseur , mais vos utilisateurs devraient être en mesure de les visualiser avec juste un navigateur (moderne). Vous devrez peut-être modifier le code suivant pour obtenir les bons chemins:
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)
pour une solution simple essayez ceci...
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=""))
ouvrir l'index.fichier html dans Firefox ou navigateur similaire qui supporte HTML5 et WebGL
la suggestion de Pete vaut la prime. La lfr-déviation n'est pas vraiment nécessaire, il est plutôt facile de générer le fichier xml avec sprintf et amis.
le problème est la vitesse: en comparaison, j'ai eu une IRM stomacale Couleur-code avec 17000 sphères (pour voxels), qui a été très sensible sur mon écran avec rgl.
quand je l'ai porté sur x3dom, le système s'est figé. Un ensemble réduit avec 450 sphères fonctionne:
http://www.menne-biomed.de/uni/x3dsample.html
Le support du navigateurest incohérent. Certains des exemples de la page d'exemple x3dom fonctionnent le mieux avec (croyez-le ou non) Internet Explorer + Flash 11. Vérifiez l'exemple de lumière dynamique.
mon exemple fonctionne, mais semble à plat sur Firefox 7.0.1. Le meilleur est toujours Chrome.
ajouté plus tard: Voici un autre exemple:
le fichier x3d qu'il contient peut être affiché même avec des graphiques embarqués en utilisant le visualiseur de réalité instantanée. Le fichier html généré à partir de celui-ci se charge parfois, mais ne peut pas être tourné.
pour interagir dynamiquement avec un graphique dans une page Web, vous aurez besoin d'un certain type de programme java ou flash pour faire l'interaction, puis avoir le code d'écriture R/données qui peuvent être compris par ce programme. à Cette question et ses réponses ressemble à un bon endroit pour commencer.
pour la flexibilité ultime, j'ai eu beaucoup de chance en utilisant traitement . Il a été écrit à l'origine en java, mais a été porté de façon stable en javascript , et plus expérimentalement en python et même quelques autres.
http://processingjs.org
http://processing.org
il utilise le HTML5 <canvas>
élément pour traiter votre code de traitement à la volée. Vous pouvez soit créer un lien vers votre code de visualisation dans un autre fichier, soit l'écrire directement dans votre fichier html (ça me rappelle Sweave!).
aussi, il y a une ressource énorme d'exemples open source en ligne. Par exemple:
Enfin, voici l'essentiel j'ai mis en place pour démontrer la configuration de base. Il suffit de télécharger l' en cours de traitement.js fichier dans le même dossier que l'essentiel et ouvrez votre navigateur.
https://gist.github.com/1295842
il ressemblera à ceci:
il y a quelques millions d'années (OK, 2005) j'ai écrit du code R pour décharger des primitives graphiques dans Mathematica (!!) format graphique, qui pourrait ensuite être intégré et visionné avec le LiveGraphics3D Java plug-in. Je n'ai pas essayé de l'utiliser en 6 ans, mais je pourrais essayer de ressusciter s'il y avait de l'intérêt.
PS voici les résultats de 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