У меня есть облако слов, где многие из элементов имеют частоту 1, но все равно важно, чтобы они отображались. Мне бы хотелось, чтобы эти результаты с частотой 1 отображались случайным образом с использованием градиента цвета (например, оттенков серого), чтобы каждый отдельный элемент с частотой 1 было легче читать, а все, что больше 1, получало бы обозначенный цвет (я буду заранее знать количество уникальных частот. Например, в данных ниже: 1, 2, 3, 9, 16).
Мой фрейм данных упоминания2 выглядит примерно так:
id n mention
1 1 las vísceras
2 1 museo de vivos
3 1 el hormiguero
4 1 las plataformas
5 1 lejos
6 1 madrileña
7 1 madrileñas
8 1 matritenses
9 2 esta ciudad
10 2 la gran ciudad
11 2 madrileño
12 2 sí mismas
13 3 una ciudad
14 9 aquí
15 10 madrid
16 16 la ciudad
17 1 ratonera
18 1 los madriles
19 1 allá
20 1 nuestra ciudad
Пока у меня есть это, которое делает то, что я хочу, за исключением того, что все элементы с частотой 1 имеют одинаковый серый цвет, и я хочу, чтобы их было легче читать, изменяя их тональность случайным образом ( назначая набор цветов вручную или используя установленный градиент или диапазон):
wordcloud(words = mentions2, freq = mentions2$n, min.freq = 1,rot.per=0,colors = c("grey28","firebrick1", "firebrick2","firebrick3","firebrick3", "firebrick4"))
Я не уверен, как поступить с теми, кто имеет частоту один отдельно от тех, которые имеют более высокие частоты. Есть мысли?
Редактировать: Следуя совету, приведенному здесь: Настроенное облако слов в двух разных цветах в R , я смог разделить свой фрейм данных на две части: частоту 1 и частоту> 1. Но я все еще не могу понять, как применить к ним два отдельных цветовых правила:
- частота 1: назначать цвета случайным образом (например, разные тона прохладных тонов)
- частота > 1: назначить цвета в соответствии с частотой (например, градиент теплых цветов)
freq1<- mentions2[ which(mentions2$n == 1) ,]
freq2<- mentions2[ which(mentions2$n >= 2) ,]
AllWords = rbind(freq1, freq2)
Colors = c(rep("blue", nrow(freq1)), rep("red", nrow(freq2)))
wordcloud(words = AllWords$mentions, freq = AllWords$n, min.freq = 1,rot.per=0,colors=Colors, ordered.colors=TRUE)
Редактировать 2: Спасибо Армандо за подсказку о том, что wordcloud не обладает гибкостью Мне нужно назначить цвета на основе переменной, кроме частоты. В конечном итоге я использовал wordcloud2, добавив столбец «color» в свой фрейм данных, и я случайным образом назначил цвет для всех моих результатов «частоты = 1»:
colors<-c("#666666","#777777","#888888","#222222","#555555","#444444","#333333","#222222","#111111","#000000")
nummentions1<-count(madridmentions2[madridmentions2$n==1,])
mentions2[mentions2$n==1,]$color <-sample(colors,1,size=as.numeric(nummentions1))
mentions2[madridmentions2$n>=2,]$color <- "#db0030"
wordcloud2(data=mentions2, color = mentions2$color, backgroundColor = "white",rotateRatio=0,shape = 'circle',fontFamily = 'Helvetica')