saveGIF () возвращает пустой GIF - PullRequest
0 голосов
/ 27 мая 2019

В R я пытаюсь получить анимированный GIF на основе нескольких изображений. Я написал функцию, возвращающую изображения, и использую функцию saveGIF () пакета анимации для создания GIF. Функция возврата изображений работает (я вижу, как изображения появляются в средстве просмотра). При использовании saveGIF создается GIF, сообщения об ошибках нет, но GIF пуст.

 library(leaflet)
 library(mapview)
 library(animation)

  latitude = c(seq(48.13608, 52.48608, 0.00145))
  longitude = c(seq(11.57278, 13.40278, 0.00061))

  sampledf <- as.data.frame(cbind(longitude, latitude))


  plot.1 <- function(df)
  {
  for (i in seq(1,nrow(df),300)){
  m<- leaflet() %>%
  addTiles() %>%
  setView( lng = 12.48778
           , lat = 50.31108
           , zoom = 4 )    %>%

  addPolylines(data = df[1:i,],
               lng = ~longitude,
               lat = ~latitude,
               color = ~"red")

  print(m)
 }
 }

  saveGIF(plot.1(sampledf),movie.name="test.gif", interval=0.5, ani.width=1980/2, ani.height=1080/2)

1 Ответ

2 голосов
/ 28 мая 2019

Это может быть запутанный способ подхода, но я мог бы сделать это, сначала создав png файлы для данных sampledf, а затем использовал библиотеку magick для создания gif-файлов.

library(leaflet)
library(mapview)
library(magick)

counter <- 1 
for (i in seq(1,nrow(sampledf),300)){

    m <- leaflet() %>%
          addTiles() %>%
          setView( lng = 12.48778
                 , lat = 50.31108
                 , zoom = 4 )    %>%
           addPolylines(data = sampledf[1:i,],
                        lng = ~longitude,
                        lat = ~latitude,
                        color = ~"red")

     mapshot(m, file = paste0("plot_", counter, ".png"))
     counter = counter + 1
}
file_names <- list.files(pattern = "plot_\\d+.png$", full.names = TRUE)

image_read(file_names) %>%
   image_animate(fps = 1) %>%
   image_write("output.gif")

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...