R: используя rgl для создания 3D-вращающихся графиков, которые можно просматривать в веб-браузере?
В мире пакета статистики R rgl позволяет мне создавать 3D-графики, которые я могу вращать с помощью мыши. Есть ли способ экспортировать эти графики в переносном формате, загружать их в веб-браузере или другом стороннем инструменте и поворачивать их там? Меня особенно интересует решение для веб-браузера, так как это позволит мне делиться сюжетами с внутренней вики.
Если rgl не позволяет этого, существуют ли другие библиотеки или стратегии, которые позволили бы мне выполнить это?
Ответы
Ответ 1
Вы можете попробовать пакет vrmlgen
. Он будет создавать 3d VRML файлы, которые могут отображаться с помощью плагина браузера; вы можете найти плагин в VRML-плагин и детектор браузера.
Как только вы установили плагин, попробуйте следующее:
require(vrmlgen)
example(bar3d)
NB: код примера не был автоматически открыт в браузере для меня (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)
Ответ 2
Для простого решения попробуйте это...
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=""))
откройте файл index.html в Firefox или аналогичном браузере, который поддерживает HTML5 и WebGL
Ответ 3
Предложение Пита стоит щедрости. Взаимный вызов не нужен, довольно легко сгенерировать xml файл с помощью sprintf и друзей.
Проблема в скорости: для сравнения у меня была МРТ с цветовым кодом с 17000 сферами (для вокселей), которая была довольно отзывчива на моем экране с помощью rgl.
Когда я поместил его в x3dom, система застыла. Сокращенный набор с 450 сферами работает:
http://www.menne-biomed.de/uni/x3dsample.html
Поддержка браузера несовместима. Некоторые примеры на странице примера x3dom лучше всего работают (верьте или нет) Internet Explorer + Flash 11. Проверьте пример динамического освещения.
Мой пример работает, но выглядит на Firefox 7.0.1. Лучше всего всегда Chrome.
Добавлено позже:
Вот еще один пример:
Stomach3D как почтовый индекс
Файл x3d, содержащийся в нем, может отображаться даже с встроенной графикой, используя средство просмотра мгновенных реальностей. Файл html, созданный из него, иногда загружается, но не может быть повернут.
Ответ 4
Чтобы динамически взаимодействовать с графиком на веб-странице, вам понадобится какой-то тип java или flash-программы для взаимодействия, а затем R-код/данные, которые могут быть поняты этой программой. Этот вопрос и его ответы выглядят как хорошее место для начала.
Ответ 5
Для максимальной гибкости мне повезло с помощью Обработка. Он был первоначально написан в java, но теперь он стабильно портирован на javascript и более экспериментально на python и даже на несколько других.
http://processingjs.org
http://processing.org
Он использует элемент HTML5 <canvas>
для обработки вашего кода обработки на лету. Вы можете либо ссылаться на ваш код визуализации в другом файле, либо записывать его прямо в свой html файл (напоминает мне Sweave!).
Кроме того, в Интернете есть огромный ресурс примеров с открытым исходным кодом. Например:
http://openprocessing.org
Наконец, вот суть, которую я собрал, чтобы продемонстрировать базовую настройку. Просто скачайте файл processing.js в ту же папку, что и сам gist, и откройте свой браузер.
https://gist.github.com/1295842
Это будет выглядеть так:
![enter image description here]()
Ответ 6
Пару миллионов лет назад (ОК, 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