我现在已经搜索了几个小时,我非常接近,但我无法让它工作。基本上,我有一个词频,我想用它来构建一个词云。但是,我想为绘制的颜色添加一些含义。出于这个原因,我在 data.frame 中添加了第三列,该列将调节要在 wordcloud 中使用的颜色。
在下面的示例中,您将看到“差异”列是每个城市之间的人口差异阈值 (6)。
我希望绿色和红色反映每个城市的人口与阈值之间的差异大小(感谢这里的帖子),棘手的一点是我希望人口等于阈值的城市有一个特定的颜色(灰色,“#c5c5c5”),我就是做不到。
library(wordcloud)
library(tm)
DF <- data.frame(
city = c("New York","Barcelona","Paris","Rome","London", "Brussels", "Leeds", "Berlin"),
pop = c(12,7,5,7,6,2,0.8,6),
diff= c(6,1,-1,1,0,-4,-5.2,0))
custColorPal <- colorRampPalette(c("#ff0000","#00cc00"))
color_range_number <- length(unique(DF$diff))
colors <- custColors[factor(DF$diff)]
custColors <- custColorPal(color_range_number)
wordcloud(DF$city, DF$pop, colors=custColors, min.freq = 0.1, ordered.colors=FALSE)
在上面的例子中,我希望两个城市是灰色的,三个是绿色的,三个是红色的。
第二次尝试:我已经设法(在 jazzurro 的帮助下)将流行度等于阈值灰色的城市名称着色。但是,如果您运行下面的代码,您会看到一些奇怪的东西。基本上,我们应该只得到一个红色城市名称,现在我们有几个(我已经更改了初始值来测试它)。我知道渐变是均匀分布的,但是如果将值拉伸到一个方向,它就不起作用。
有没有办法同时使用两个渐变?一个大于,另一个小于零(或任何其他值)?
DF <- data.frame(
city = c("New York","Barcelona","Paris","Rome","London", "Brussels", "Leeds", "Berlin"),
pop = c(12,7,5,7,6,2,0.8,6),
diff= c(20,1,10,1,0,7,-0.2,0))
DF$city<-as.character(DF$city)
custColorPal <- colorRampPalette(c("#ff0000","#00cc00"))
color_range_number <- length(unique(DF$diff))
custColors <- custColorPal(color_range_number)
colors <- custColors[factor(DF$diff)]
DF<-cbind(DF,colors)
DF$colors<-as.character(DF$colors)
DF<-transform(DF, colors = case_when(
diff == 0 ~ "#c5c5c5",
TRUE ~ colors
))
wordcloud(DF$city, DF$pop, colors=DF$colors, min.freq = 0.1, ordered.colors=TRUE)
在此先感谢您的任何指点
干杯