Включить интерактивный график rgl в .Rnw (вывод в формате pdf)

Описание проблемы

Я хотел бы включить интерактивную (вращающуюся) трехмерную диаграмму рассеяния rgl в файл .pdf, связанный из файла .Rnw. Я знаю, что есть ловушка для включения rgl, но, возможно, это только для вывода html. Кажется, я не могу включить сюжет, чтобы он вращался. Вот минимальный пример. График появляется, но есть линии, а не точки, и нет возможности поворота.

Вопросы)

  1. Возможно ли включение интерактивного rgl в pdf?
  2. Если да... Как я могу сделать это с помощью Knitr?; что я делаю неправильно?

MWE

\documentclass{article}

\begin{document}

<<setup, include=FALSE, cache=FALSE>>=
library(knitr)
library(rgl) 
knit_hooks$set(rgl = hook_rgl)
@

<<fancy-rgl, rgl=TRUE>>=
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
# open3d()
plot3d(x, y, z, col = 'black')
@


\end{document}

Что я вижу в pdf:

введите здесь описание изображения


person Tyler Rinker    schedule 05.11.2016    source источник
comment
Я могу ошибаться, но у меня сложилось впечатление, что файлы PDF могут отображать только статический контент.   -  person nrussell    schedule 05.11.2016
comment
Я надеюсь, что это неправда. Вы можете включить анимацию. В примере с крючками используется именно этот пример: yihui.name/knitr/hooks Это также указывает на то, что интерактивный rgl может происходит, но это также не отображается как динамическое: github .com/yihui/knitr-examples/blob/master/092-latex-rgl.Rnw   -  person Tyler Rinker    schedule 05.11.2016
comment
Это означает, что это всего лишь одно изображение: if we want to insert 3D snapshots produced in rgl из yihui.name/knitr/hooks.   -  person Tyler Rinker    schedule 05.11.2016
comment
Я не уверен, как должны работать связанные knitr примеры, но когда я пробовал их, они не генерировали интерактивный график в документе PDF. Я почти уверен, что это просто ограничение формата PDF в целом, не обязательно специфичное для knitr или rgl. Эта тема имеет отношение к вашему вопросу.   -  person nrussell    schedule 05.11.2016
comment
Только Adobe PDF Reader поддерживает анимацию. Анимация была создана пакетом LaTeX animate. Я помню, что есть пакеты LaTeX, которые поддерживают интерактивные 3D-графики, но я не знаю, можно ли связать rgl с этими пакетами.   -  person Yihui Xie    schedule 05.11.2016
comment
@ Кто бы ни проголосовал за вас, вы должны быть троллем, не знающим руководства справочного центра (я опубликую здесь для удобства чтения: stackoverflow.com/help), либо вы просто допустили ошибку. Если вы действительно считаете, что вопрос плохо отформатирован или выходит за рамки, пожалуйста, оставьте пояснительный комментарий, чтобы я мог улучшить вопрос.   -  person Tyler Rinker    schedule 06.11.2016


Ответы (1)


Это возможно, но едва ли. Вам нужно установить Asymptote и использовать rgl::writeASY(), чтобы написать для него программу. Затем включите эту программу в свой документ, запустите LaTeX, затем Asymptote, затем снова LaTeX.

Примеры включения Asymptote в LaTeX приведены здесь: http://asymptote.sourceforge.net/doc/LaTeX-usage.html#LaTeX-usage.

Результаты какие-то неутешительные.

Мой совет - отказаться от PDF. HTML5 гораздо лучше подходит для вывода; rgl неплохо справляется (используя rglwidget()) с созданием вывода для веб-страниц. Маловероятно, что будут предприняты какие-либо усилия для улучшения вывода PDF, тогда как устранение оставшихся пробелов в поддержке HTML является приоритетом.

person user2554330    schedule 05.11.2016
comment
Спасибо. Я согласен на pdf. Это для диссертации, где мне нужен был экстремальный контроль над форматированием, и многие классные вещи rmarkdown, которые у нас есть сейчас, были новыми или отсутствовали, когда я начал это 2 года назад. - person Tyler Rinker; 06.11.2016
comment
@TylerRinker Вы можете вставить статический снимок экрана в PDF-файл и дать ссылку на интерактивную HTML-версию, которую вы развертываете где-нибудь, например, на страницах Github или в Dropbox. - person Yihui Xie; 12.11.2016
comment
Было бы очень полезно, если бы кто-то включил пример этого в качестве другого ответа. - person user101089; 14.11.2016