#r #imagemagick #gganimate
Вопрос:
Я пытаюсь расположить два участка gganimate бок о бок. Для этого я:
- Создайте анимацию с помощью gganimate
- Преобразуйте анимацию в магические изображения (с помощью
image_read()
) - Создайте комбинированный график для каждого кадра с помощью
image_append()
Проблема, с которой я сталкиваюсь, заключается в том, что использование image_read()
на шаге 2 создает два объекта разных размеров, несмотря на то, что значение nframes в animate()
вызове одинаковое. Это приводит к тому, что я не могу соединить два изображения вместе.
Я не буду добавлять весь свой код, так как фреймы данных большие, но по сути это то, что происходит:
library('ggplot2')
library('gganimate')
library('magick')
#Set the number of frames for the animation
nframes = 513
#Create the first plot
a1 <- ggplot(...) transition_manual()
#Animate the first plot
anim1 <- animate(a1, nframes = nframes, fps = 9, height = 600, width = 600)
#Create the second plot
a2 <- ggplot(...) transition_reveal()
#Animate the second plot
anim2 <- animate(a2, nframes = nframes, fps = 9, height = 200, width = 600)
#Convert to magick-images
anim1_magic <- image_read(anim1)
anim2_magic <- image_read(anim2)
#Inspect the results
length(anim1_magic)
> 513
length(anim2_magic)
> 466
Я не могу понять, что происходит: количество кадров одинаковое, но image_read()
относится к ним по-разному. Это означает, что я не могу соединить два кадра, используя следующий код:
anim1_2_magic <- image_append(c(anim1_magic[1], anim2_magic[1]), stack = T)
for(i in 2:nframes) {
combined <- image_append(c(anim1_magic[i], anim2_magic[i]), stack = T)
anim1_2_magic <- c(anim1_2_magic, combined)
}
Другая странная вещь заключается в том, что иногда кажется, что это работает, но не другие. Я не могу понять, что делает image_read() из документов. Возможно, есть способ подсчитать количество кадров в gganimate gif (чтобы увидеть, есть ли проблема), но я также не могу найти инструмент для этого.