Цель этого руководства - показать вам пошагово создание анимированного GIF-изображения с помощью R и ImageMagick. Сначала вы должны установить ImageMagick.
Также возможно создавать анимированные изображения .gif, используя только R, с помощью write.gif () в пакете caTools.
Код R, описанный в этом руководстве, был протестирован на Mac OS X 10.6.8 с R 2.13
Пример 1. Создание обратного отсчета
Обратный отсчет от 10 до 1. Мы создадим его за 4 шага.
1. Создание чистого рабочего каталога под названием «examples».
2. Создание изображений .png, каждое из которых содержит число (от 10 до 1).
3. Создание одного изображения Gif с использованием ImageMagick.
4 - Удаление png-файлов, которые больше не нужны.
Соответствующий код R показан ниже:
#создание рабочего каталога dir.create("examples") setwd("examples") #Создание файлов .png от 10 до "GO!" png(file="example%02d.png", width=200, height=200) for (i in c(10:1, "G0!")){ plot.new() text(.5, .5, i, cex = 6) } dev.off() # Конвертирование файлов .png в один .gif с помощью ImageMagick system("/opt/local/bin/convert -delay 80 *.png example_1.gif") # Удаление файлов .png из рабочего каталога file.remove(list.files(pattern=".png"))
1. Функция system() выполняет команду преобразования, как в терминале. Я использую абсолютный путь к команде преобразования. В моем случае это: /opt/local/bin/convert. В некоторых случаях работает команда system("convert -delay 80 *. Example_1.gif png").
2. Флаг -delay - это время между двумя изображениями (скорость анимации).
3. Часть "%02d" в имени файла автоматически увеличивает имена файлов .png
Результат
Пример 2. Создание трехмерной анимированной графики
Мы создадим трехмерный график поверхности для визуализации линейной модели с использованием пакета lattice. 3D-графику можно создавать также с помощью пакета rgl.
library(lattice) b0 = 10 b1 = .5 b2 = .3 g = expand.grid(x = 1:20, y = 1:20) g$z = b0 + b1*g$x + b2*g$y png(file="example%03d.png", width=300, heigh=300) for (i in seq(0, 350 , 10)){ print(wireframe(z ~ x * y, data = g, screen = list(z = i, x = -60))) } dev.off() # конвертируем файл .png в .gif с помощью ImageMagick system("/opt/local/bin/convert -delay 40 *.png example_2_reduced.gif") # Удаляем файл .png file.remove(list.files(pattern=".png"))
Результат
Комментариев нет:
Отправить комментарий