2016-05-17 14 views
4

Ich versuche, mehrere Wordclouds zu machen, um Begriffe zu vergleichen, die selbst in Gruppen verschachtelt sind. Ich möchte eine Wortwolke pro Gruppe machen. Das wordcloud Paket in R kann die Wordclouds, die ich brauche, aber jedes neue Wordcloud hat die Größe der Wörter skaliert relativ auf die maximale und minimale Worthäufigkeit. Dies kann mit dem Parameter scale eingestellt werden.Wordclouds mit absoluten Wortgrößen

Mein Ziel ist es, Wordclouds zu machen, bei denen die Größe des Wortes absolut mit der Häufigkeit des Wortes zusammenhängt, wodurch verschiedene Wordclouds visuell verglichen werden können.

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

Dies ist die aktuelle Wordcloud ich aus dem obigen Befehl erhalten, auf beiden Gruppen in der MWE laufen (obwohl die genaue Platzierung zufällig mit jedem Laufe variieren). Ich möchte, dass jeder Buchstabe in der Wortwolke der zweiten Gruppe doppelt so groß ist wie der erste in Übereinstimmung mit den Daten (oder dass es einen vernünftigen skalierten Unterschied gibt, auch wenn er nicht linear ist).

Wie kann dies erreicht werden?

+1

Ich bin nicht sicher, es gibt eine Möglichkeit, dies in Wordcloud zu tun. Es würde mich interessieren, ob jemand einen finden kann! Sie könnten versuchen, die wordclouds in ggplot zu machen: http://mhairihmcneill.com/blog/2016/04/05/wordclouds-in-ggplot.html –

Antwort

2

Hm, das könnte ein Umweg sein. Was aber, wenn wir den Maßstab für alle Daten mit einem einzigen Anker festlegen.

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

Danke, das ist eine nette Abhilfe, die, auch wenn es nicht zwei macht Wordclouds genau proportional, ist gut genug für einen Vergleich. Ich denke, dass alles darüber hinaus mit "wordcloud" wahrscheinlich nicht möglich ist - aber ich habe Mühe, gut entwickelte und technisch fähige Softwarepakete zu finden, die Wordclouds und ähnliche Designs erstellen können. Wenn jemand Vorschläge hat, wäre das großartig. –