在python中的词云与三个单独的值

时间:2017-12-15 09:29:08

标签: matplotlib data-visualization python-3.5 tableau word-cloud

我想在python中创建一个单词云,以便每个单词都以数据源的颜色标记 说我有:

comment         Data source
  Hello there     1  (red)
  Hello!          1  (red) 
  Hi there        2 (green)
  im good         3 (blue)

所以基本上是所有三个注释的文字云,其中每个单词都是它的相应数据源的颜色,因此hello => red,hi => green和im,good => blue。如果有'那么颜色可能是单独的颜色(比如橙色),用于表示红色和绿色标签的单词 和其他一些颜色,让我们说紫色,如果单词出现在蓝色+红色标签中,......

我如何在python中做同样的事情?我所能做的就是使用以下代码生成一个简单的文字云:

from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
wordcloud = WordCloud(
                      stopwords=STOPWORDS,
                      background_color='white',
                      width=1200,
                      height=1000
                     ).generate(word_string)


plt.imshow(wordcloud)
plt.axis('off')
plt.show()

或者可以在tableau中执行此操作吗?

1 个答案:

答案 0 :(得分:0)

您需要指定color_func并将其作为关键字参数传递给Wordcloud。颜色规格必须是有效的PIL颜色规格。 概念上简单的方式是这样的:

import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS

word_string = ... 

def color_func(word, *args, **kwargs):
    if word in ['hello']:
        color = '#ff0000' # red
    elif word in ['hi']:
        color = '#00ff00' # green
    elif word in ['im', 'good']:
        color = '#0000ff' # blue
    elif word in ['there']:
        color = 'ffa500' # orange
    else:
        color = '#000000' # black
    return color

wc = Wordcloud(..., color_func=color_func, ...)
wc.generate(word_string)

编写这样的函数有点单调乏味,我会定义一个将单词映射到颜色的字典,然后将其封装在一个函数中:

word_to_color = dict()

blue_words = ['im', 'good']
for word in blue_words:
    word_to_color[word] = '#0000ff' # blue

# etc

def color_func(word, *args, **kwargs):
    try:
        color = word_to_color[word]
    except KeyError:
        color = = '#000000' # black
    return color

在后一种情况下,您需要确保在定义color_func之后定义word_to_color