Облака слов с абсолютными размерами слов

Я пытаюсь создать несколько облаков слов для сравнения терминов, которые сами по себе вложены в группы. Я хотел бы сделать одно облако слов на группу. Пакет wordcloud в R может создавать нужные мне облака слов, но каждое новое облако слов имеет размер слов, масштабированный относительно к максимальной и минимальной частоте слов. Это можно установить с помощью параметра scale.

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

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

Текущее облако слов

Это текущее облако слов, которое я получаю от приведенной выше команды, запускаемой в обеих группах в MWE (хотя точное размещение будет случайным образом меняться при каждом запуске). Я хотел бы, чтобы каждая буква в словесном облаке второй группы была в два раза больше первой, в соответствии с данными (или чтобы была какая-то ощутимая разница в масштабе, даже если она нелинейна).

Как этого добиться?


person Michael Veale    schedule 17.05.2016    source источник
comment
Я не уверен, что есть способ сделать это в wordcloud. Мне было бы интересно посмотреть, может кто-нибудь найдет! Вы можете попробовать создать облака слов в ggplot: mhairihmcneill.com/blog /2016/04/05/wordclouds-in-ggplot.html   -  person Mhairi McNeill    schedule 17.05.2016


Ответы (1)


Хм, это может быть окольным путем. Но что, если мы зададим масштаб для всех данных с помощью одного якоря.

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))
person zyurnaidi    schedule 17.05.2016
comment
Спасибо, это хороший обходной путь, который, даже если он не делает два облака слов точно пропорциональными, достаточно хорош для сравнения. Я думаю, что что-либо большее, чем это, вероятно, невозможно с использованием wordcloud, но я изо всех сил пытаюсь найти хорошо разработанные и технически совершенные программные пакеты, которые могут создавать облака слов и подобные проекты. Если у кого-то есть предложения, было бы здорово. - person Michael Veale; 17.05.2016