Вы можете использовать webshot
для захвата статического изображения HTML-вывода Plotly, используя следующие инструкции: https://plot.ly/r/static-image-export/
Пример цикла ниже генерирует случайные диаграммы рассеяния из mtcars
.
library(plotly)
library(webshot)
## You'll need to run the function the first time if you dont't have phantomjs installed
#webshot::install_phantomjs()
ColumnOptions <- colnames(mtcars)
for (i in seq_len(5)){
xCol <- sample(ColumnOptions,1)
yCol <- sample(ColumnOptions,1)
ThisFileName <- paste0("Scatter_",xCol,"_vs_",yCol,".png")
plot_ly(x = mtcars[[xCol]], y = mtcars[[yCol]], type = "scatter", mode = "markers") %>%
export(., file = ThisFileName)
}
Однако, если вы собираетесь делать это десятки раз, объем вычислений, необходимых для выполнения следующих шагов, действительно складывается.
- Генерация JSON
plotly
объект из R
- Используйте
htmlwidgets
/ htmltools
для создания автономной веб-страницы HTML - Визуализируйте этот HTML как браузер, который будет видеть его с внешней программой -
webshot
- Используйте
webshot
, чтобы визуализировать изображение этого HTML и сохранить его в формате PNG
Это не является отражением медленной plotly
, ноЧтобы провести аналогию, это похоже на то, как если бы вы использовали самолет, чтобы проехать полмили - самолет доставит вас туда, но если вам нужно совершить эту поездку несколько раз, вам, вероятно, следует подумать об автомобиле.
Цикл plotly
, приведенный выше, рендеринг занимает 27 секунд5 изображений PNG, но альтернативный метод, описанный ниже с использованием ggplot2
, занимает 1,2 секунды.
library(ggplot2)
ColumnOptions <- colnames(mtcars)
for (i in seq_len(5)){
xCol <- sample(ColumnOptions,1)
yCol <- sample(ColumnOptions,1)
ThisFileName <- paste0("ggplot2_Scatter_",xCol,"_vs_",yCol,".png")
ggplot() +
geom_point(aes(x = mtcars[[xCol]], y = mtcars[[yCol]])) +
labs(x = xCol, y = yCol) -> ThisPlot
ggsave(plot = ThisPlot, filename = ThisFileName)
}