2016-05-17 64 views
4

我正在尝试使用几个wordcloud来比较术语,这些术语本身嵌套在组中。我想为每个组制作一个wordcloud。 R中的wordcloud包可以创建我需要的wordcloud,但是每个新的wordcloud都具有缩放到相对到最大和最小词频的大小。这可以通过参数scale进行设置。具有绝对字大小的Wordcloud

我的目标是制作wordclouds,其中单词的大小与单词的频率完全相关,从而可以在视觉上比较不同的wordcloud。

library(wordcloud) 
dat <- data.frame(word = rep(LETTERS[1:3], 2), freq = c(10, 5, 3, 20, 10, 6), group = c(1, 1, 1, 2, 2, 2)) 

dat 
# word freq group 
#1 A 10  1 
#2 B 5  1 
#3 C 3  1 
#4 A 20  2 
#5 B 10  2 
#6 C 6  2 

wordcloud(dat$word[dat$group == 1], dat$freq[dat$group == 1]) 
wordcloud(dat$word[dat$group == 2], dat$freq[dat$group == 2]) # Currently the same 

Current wordcloud

这是当前wordcloud我从上述命令取得,对在MWE两组运行(虽然确切位置将随每次执行时随机变化)。我希望第二组的wordcloud中的每个字母都是第一个字符的两倍,与数据一致(或者即使它不是线性的,也存在一些明显的缩放差异)。

这是如何实现的?

+1

我不确定在wordcloud中有这样做的方法。我很想看看有没有人能找到一个!您可以尝试在ggplot中制作wordcloud:http://mhairihmcneill.com/blog/2016/04/05/wordclouds-in-ggplot.html –

回答

2

嗯,这可能是一个迂回的方式。但是如果我们使用单个锚来设置所有数据的比例呢?

anchor <- max(dat$freq) 
wordcloud(dat$word[dat$group == 1], dat$freq[dat$group == 1], scale = c(8*max(dat$freq[dat$group == 1])/anchor, 0.5)) 
wordcloud(dat$word[dat$group == 2], dat$freq[dat$group == 2], scale = c(8*max(dat$freq[dat$group == 2])/anchor, 0.5)) 
+0

谢谢,这是一个很好的解决方法,即使它不会使两个wordclouds正好成比例,足以进行比较。我认为除此以外的任何事情可能都不可能使用'wordcloud' - 但我很努力地找到可以制作wordclouds和类似设计的完善开发和技术上可行的软件包。如果有人有建议,那会很棒。 –