R: используя rgl для создания трехмерных вращающихся графиков, которые можно просматривать в веб-браузере? - PullRequest
24 голосов
/ 05 октября 2011

В мире пакета статистики R, rgl позволяет мне создавать 3d графики, которые я могу вращать с помощью мыши.Можно ли как-то экспортировать эти графики в переносимый формат, загрузить их в веб-браузер или другой сторонний инструмент и повернуть их там?Я особенно заинтересован в решении для веб-браузера, так как это позволит мне поделиться графиками на внутренней вики.

Если rgl не позволяет этого, есть ли другие библиотеки или стратегии, которые позволили бы мне достичь этого?

Ответы [ 6 ]

15 голосов
/ 14 октября 2011

Вы можете попробовать пакет vrmlgen. Он будет генерировать файлы 3D VRML, которые могут отображаться с помощью плагина браузера; Вы можете найти плагин на VRML Plugin и 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)
13 голосов
/ 08 августа 2012

Для простого решения попробуйте это ...

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

2 голосов
/ 16 октября 2011

Предложение Пита стоит награды. Обход wrl на самом деле не нужен, достаточно просто сгенерировать xml-файл с помощью sprintf и друзей.

Проблема в скорости: для сравнения, у меня была МРТ желудка с цветным кодом с 17000 сферами (для вокселей), которая была довольно отзывчивой на моем экране с помощью rgl.

Когда я перенес его на x3dom, система зависла. Сокращенный набор из 450 сфер работает:

http://www.menne -biomed.de / уни / x3dsample.html

Поддержка браузера несовместима. Некоторые примеры на странице примеров x3dom лучше всего работают (верьте, хотите нет) с Internet Explorer + Flash 11. Проверьте пример динамического освещения.

Мой пример работает, но на Firefox 7.0.1 выглядит плоским. Best всегда Chrome.

Добавлено позже: Вот еще один пример:

Stomach3D в формате Zip

Содержащийся в нем x3d-файл может отображаться даже с встроенной графикой с помощью средства просмотра мгновенных реальностей. HTML-файл, сгенерированный из него, иногда загружается, но не может быть повернут.

1 голос
/ 18 октября 2011

Для максимальной гибкости мне повезло, используя Обработка .Первоначально он был написан на Java, но теперь он был стабильно портирован на javascript , и более экспериментально на python и даже несколько других.*

Он использует элемент HTML5 <canvas> для обработки вашего кода обработки на лету.Вы можете либо сослаться на свой код визуализации в другом файле, либо написать его прямо в html-файле (напоминает мне о Sweave!).

Кроме того, в Интернете есть огромный ресурс примеров с открытым исходным кодом.Например:

http://openprocessing.org

Наконец, вот суть, которую я собрал, чтобы продемонстрировать основные настройки.Просто загрузите файл processing.js в ту же папку, что и gist, и откройте браузер.

https://gist.github.com/1295842

Это будет выглядеть так:

enter image description here

1 голос
/ 05 октября 2011

Чтобы динамически взаимодействовать с графиком на веб-странице, вам понадобится некоторый тип Java или флеш-программы для взаимодействия, а затем R написать код / ​​данные, которые могут быть понятны этой программе. Этот вопрос и ответы на него выглядят как хорошее место для начала.

0 голосов
/ 06 октября 2011

Пару миллионов лет назад (ОК, 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
...