有没有办法让R中的词云动起来?

问题描述 投票:0回答:1

当前,我正在使用library(“ wordcloud”)来制作一个包含我经常使用的某些文本数据的词云。文本数据还带有相关的年份,我希望能够根据年份生成新的词云,并且希望使用gganimate这样的库将其自动设置为动画。有什么办法吗?我想将一段时间内最常用的关键字形象化,但是我很挣扎。有小费吗?

r data-visualization word-cloud gganimate
1个回答
0
投票

是,在ggwordcloud软件包的帮助下。我将使用babynames数据集作为一个有趣的示例,以查看100年来5个最常见的婴儿名字的变化。首先,加载所需的软件包并加载数据。

library(babynames)   # Data
library(dplyr)       # Data management
library(ggplot2)     # Graph framework
library(ggwordcloud) # Wordcloud using ggplot
library(gganimate)   # Animation

data(babynames)

下一条命令将按年份分组,分别查找1915年和2015年每种性别的前5名。

babies <- babynames %>%
  filter(year %in% c(1915, 2015)) %>%
  group_by(name, sex, year) %>%
  summarise(n=sum(n)) %>%
  arrange(desc(n)) %>%
  group_by(year) %>%
  top_n(n=5) %>%

# A tibble: 10 x 4
# Groups:   year [2]
#   name    sex    year     n
#   <chr>   <chr> <dbl> <int>
# 1 Mary    F      1915 58187
# 2 John    M      1915 47577
# 3 William M      1915 38564
# 4 James   M      1915 33776
# 5 Helen   F      1915 30866
# 6 Emma    F      2015 20435
# 7 Olivia  F      2015 19669
# 8 Noah    M      2015 19613
# 9 Liam    M      2015 18355
#10 Sophia  F      2015 17402

  ungroup() %>%
  select(name, sex)

我在结束前暂停了它,只是为了向您显示在省略年份和频率之前返回的名称,因为我想将此数据与原始数据合并,以获取1915年至2015年之间每5年的频率,而不是每年,因为绘制时间太长。

这里是联接。

babyyears <- babynames %>%
  inner_join(babies, by=c("name","sex")) %>%
  filter(year>=1915 & year %% 5 == 0) %>%  # Keep all years if you like
  mutate(year=as.integer(year))  # For animation. Not sure why this is required.

所以这只是为绘图设置数据。如果我们只需要一个静态的wordcloud,则可以按年份进行汇总。但是我们保留了动画的制作年限。

对于绘图,我们将ggplot与geom_text_wordcloud函数一起使用。

gg <- babyyears %>%
  ggplot(aes(label = name, size=n)) +
  geom_text_wordcloud() +
  theme_minimal()

然后是多年的过渡。

gg2 <- gg + transition_time(year) +
  labs(title = 'Year: {frame_time}')

我想在结尾处添加一个暂停,否则动画会在完成后立即滚动到开头。

animate(gg2, end_pause=30)
anim_save("gg_anim_wc.gif")

enter image description here

很难跟踪所有名字(尤其是男孩),并将它们全部放在随机位置。也许放慢速度会有所帮助。但是,从该图形中最突出的名称是“玛丽”,这是1915年最常用的名称,但随后逐渐开始在本世纪下半叶逐渐消失。

© www.soinside.com 2019 - 2024. All rights reserved.