Как в R сделать гифку для compare.cloud? - PullRequest
0 голосов
/ 07 мая 2020

R newb ie здесь.

У меня есть wordcloud с 7 разными классами, использующими compare.cloud (). Я хочу создать GIF, который выглядит следующим образом:

  • 1-й кадр: ничего не отображается.
  • 2-й кадр: отображается 1-й класс
  • 3-й кадр: отображаются 1-й + 2-й классы
  • ..... и так далее, пока я не дойду до последнего кадра, в котором отображается каждый класс

Пакеты, которые я использую, :

library(reshape)
library(NLP)
library(tm)
library(RColorBrewer)
library(wordcloud)

Мне удалось создать GIF, каждый раз создавая PNG с wordcloud и задавая цвет текста классов, которые я не хотел отображать так же, как цвет фона (беспорядочное решение, но оно было лучшим, о чем я мог думать).

Я использовал этот код для GIF.

library(magick)
frames <- paste0("", 1:14, ".png")
m <- image_read(frames)
m <- image_animate(m, fps=0.5)
image_write(m, "wordcloud.gif")

Моя проблема в том, что, поскольку я создаю новое облако слов для каждого файла PNG, позиции слов в классах меняются и переходы в анимации выглядят плохо.

Есть ли способ создать этот GIF, используя только одно wordcloud? (например, получение одного класса за раз)

Также извините за долгое чтение.

1 Ответ

0 голосов
/ 07 мая 2020

Составьте слова, которые вы не хотите отображать белым, и используйте set.seed, чтобы позиции оставались постоянными:

library(wordcloud)
library(magick)

words <- c(letters, LETTERS, 0:9)
freq <- seq(1, 1000, len = 62)
n <- length(words)

for (i in seq_len(n)) {
  png(paste0('test', i, '.png'))
  set.seed(1234)
  wordcloud(words, freq, colors = c(rep('black', i), rep('white', n - i)))
  dev.off()
}

frames <- paste0("test", seq_len(n), ".png")
m <- image_read(frames)
m <- image_animate(m, fps = 10)
image_write(m, "wordcloud.gif")

enter image description here

...