【问题标题】:R wordcloud: varying color of a specific frequencyR wordcloud:特定频率的不同颜色
【发布时间】:2020-03-06 00:00:55
【问题描述】:

我有一个 wordcloud,其中许多项目的频率为 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"))

我不确定如何分别处理频率为 1 的人与频率较高的人。有什么想法吗?

编辑:按照此处的建议:Customised Word Cloud in two different colors in R,我能够将我的数据帧分成两部分:频率为 1 和频率 >1。但我仍然不知道如何对它们应用两个单独的颜色规则:

  • 频率 1:随机分配颜色(例如,不同的冷色调 音调)
  • frequency >1:根据频率分配颜色(例如,a 暖色渐变)
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:感谢 Armando 让我了解 wordcloud 不具备我需要根据频率以外的变量分配颜色的灵活性这一事实。我最终使用 wordcloud2 在我的数据框中添加了一个“颜色”列,并为我的所有“频率=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')

【问题讨论】:

    标签: r


    【解决方案1】:

    wordcloud 无法满足您的要求,因为 color 选项只接受包会自动根据频率设置的颜色向量。

    我建议您使用更灵活的包wordcloud2,它可以提供更大的灵活性。在下面的代码中,我将向您展示如何将灰色序列用于 1 个频率,将黄红色序列用于其他值。由于 fontsize 已经显示频率,您可以使用 info 包中的默认随机颜色 https://cran.r-project.org/web/packages/wordcloud2/vignettes/wordcloud.html 例子:

    library(wordcloud2)    
    library(scales)
    
    cloud <- demoFreq[1:500,]
    freqs <- unique(cloud$freq)[order(unique(cloud$freq))]
    
    cloud$color=""
    cloud[cloud$freq==1,]$color <- scales::seq_gradient_pal(low="#F0F0F0", high="#252525",space = "Lab")(seq(0,1,length.out=sum(cloud$freq==1)))
    
    cols <- scales::seq_gradient_pal(low="yellow", high="red",space = "Lab")(seq(
      0,1,
      length.out=(length(freqs)-1)))
    
    for (i in 2:length(freqs)){
      cloud[cloud$freq==freqs[i],]$color <- cols[i-1]
    }
    
    wordcloud2(demoFreq, color = cloud$color, backgroundColor = "pink")
    

    【讨论】:

    • 感谢您的回复。这不是我要找的。我想要做的是为 freq=1 集设置一个渐变(其中所有 freq=1 结果将随机分配一种颜色),并根据其频率为结果 2-x 设置不同的渐变(例如,更高的频率是更热或更暗的颜色)。基本上,所有的 freq=1 结果最终都是完全相同的颜色,这使得它们很难阅读。
    • 这正是我想要它做的......我可以看到解决方案肯定超出了我对 R 的基本掌握......非常感谢您花时间帮助新手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    相关资源
    最近更新 更多