【发布时间】:2017-12-14 17:48:56
【问题描述】:
我需要一个词云,其中同一个词可以用不同的颜色出现两次;红色表示负相关,绿色表示正。
我已经能够使用 MultiDicts 生成包含重复单词的 wordcloud(参见下面的代码):
但是,我需要其中一栋房屋以绿色显示。 wordcloud libray可以做到这一点吗?有人可以推荐另一个支持这个的库吗?
from wordcloud import WordCloud
from multidict import MultiDict
class WordClouder(object):
def __init__(self, words, colors):
self.words = words
self.colors = colors
def get_color_func(self, word, **args):
return self.colors[word]
def makeImage(self, path):
wc = WordCloud(background_color="white", width=200, height=100)
# generate word cloud
wc.generate_from_frequencies(self.words)
# color the wordclound
wc.recolor(color_func=self.get_color_func)
image = wc.to_image()
image.save(path)
if __name__ == '__main__':
# Ideally this would be used somewhere
colors_valence = {
'+': 'green',
'-': 'red',
}
colors = {
'home': 'red',
'car': 'green',
}
words = MultiDict({
'home': 2.0, # This home should be green
'car': 20.0,
})
words.add('home',10) , # This home should be red
wc = WordClouder(words, colors)
wc.makeImage('wordcloud.png')
【问题讨论】:
-
你看懂你写的代码了吗?
def get_color_func根据确切的单词返回颜色。所以要么创建一个虚拟词home并赋予它另一种颜色,或者将整个词 颜色系统重写为其他东西。 -
你的意思是在首页添加一个空格,所以我有
"home "和"home"?我想过,但实际上我将有两个以上的类别(正面和负面只是一个简化的例子,使问题易于理解)。如果我有 5 个类别,就会有 4 个空格,然后词云开始看起来很奇怪。无论如何,这不是一个非常优雅的解决方案,更像是一个 hack。 -
然后,正如我所说,您需要添加另一种区分变体的方法。就像现在一样,颜色与这个词有着千丝万缕的联系。
-
嗯,是的,这是我的问题。如果 wordcloud 库支持这一点,或者有人可以推荐替代方案。我查看了wordcloud代码,似乎不支持。
-
我想过给字符串添加属性,但它是not very recommended,另一个猴子补丁。
标签: python word-cloud