Как создать «интерактивное» графическое устройство на основе закадровой (растровой) графики в R? - PullRequest
0 голосов
/ 21 сентября 2018

Построение больших графиков в R может быть мучительно медленным.Я пробую некоторые обходные пути , но даже с максимально буферизованным устройством "dbcairo" X11 построение графиков занимает гораздо больше времени, чем могло бы.Я заметил, что устройство "png" быстрее как для маленьких, так и для больших графиков.

Маленькие графики, png () побеждает X11 () примерно в 3 раза:

> system.time({X11(type="dbcairo"); plot(1:1e3); dev.off()})
   user  system elapsed 
  0.234   0.029   0.373 
> system.time({png("file.png",type="cairo"); plot(1:1e3); dev.off()})
   user  system elapsed 
  0.114   0.000   0.113 
> system.time({png("file.png",type="Xlib"); plot(1:1e3); dev.off()})
   user  system elapsed 
  0.056   0.000   0.107 

Большие графики,png () превосходит X11 () от 2,3x до 46x:

> system.time({X11(type="dbcairo"); plot(1:1e5); dev.off()})
   user  system elapsed 
 14.420   0.157  15.491 
> system.time({png("file.png",type="cairo"); plot(1:1e5); dev.off()})
   user  system elapsed 
  6.790   0.001   6.826 
> system.time({png("file.png",type="Xlib"); plot(1:1e5); dev.off()})
   user  system elapsed 
  0.144   0.010   0.340 

Результаты были почти такими же, как и у других типов устройств X11 () (аналогично "dbcairo") и других типах растровых изображений (быть похожим на "png").Я предполагаю, что png () типа "cairo" занимает больше времени, чем "Xlib", потому что он производит сглаженный вывод.

С графиком ggplot2 среднего размера я обнаружил, что png () работает в 1,7–2,6 раза быстреечем X11 () (который использует png(..); plot(g); dev.off(), а не ggsave())

Поскольку я могу загружать и перезагружать файл PNG практически мгновенно, используя минималистский просмотрщик изображений, такой как «feh», мне интересно, почему яне используйте png () в качестве основного устройства печати с R.

Проблема, конечно, в том, что файл PNG не записывается на диск, пока я не вызову dev.off ().Это ограничивает стиль стандартного графического интерфейса, в котором я настраивал устройство один раз, а затем вызывал различные графики, иногда добавляя строки или текст, одновременно просматривая каждое изменение в окне графика.

Было бы трудносоздать новое графическое устройство R, которое записывает файлы изображений в PNG (или другой формат изображения), но использует простую программу просмотра изображений, например «feh», для отображения их после каждой команды построения?Другими словами, я ищу «интерактивное» графическое устройство, такое как X11, но для отрисовки изображения которого используются средства вывода за пределы экрана растрового изображения существующих устройств, такие как png (), jpeg () или tiff ().Или, может быть, устройство png () можно изменить, чтобы иметь опцию, которая дает ему такое поведение.(Или, может быть, я должен использовать knitR для всего ... но я более знаком с командной строкой ...)

1 Ответ

0 голосов
/ 21 сентября 2018

Если X11 ведет вас к стене, и вы не хотите использовать средство просмотра сюжетов RStudio (или не можете этого сделать, потому что вы находитесь на удаленном сервере, на котором вы не можете установить RStudio Server), одной из интересных альтернатив являетсяиспользуйте пакет rmote.Вы можете установить его либо на свою локальную установку R, либо, если вы используете SSH на удаленную машину и хотите перенаправить порт, на удаленный экземпляр R.Затем любые напечатанные вами графики и файлы справки будут перенаправлены на локальный веб-сервер, где вы сможете получить к ним доступ через браузер.

Он также поставляется с некоторыми приятными дополнениями, такими как:

  • История графика,
  • Возможность щелкать правой кнопкой мыши и сохранять графики, как и любое другое изображение в браузере, и
  • Возможность выбирать, какие виды вывода отправляются насервер.

Я нашел эту хорошую альтернативу пересылке X11 с графиками на удаленном сервере, и она также хорошо работает локально ?

...