天天看點

詞雲生成庫wordcloud詳解(二):wordcloud.py子產品結構、生成顔色接口

目前

wordcloud

版本:1.81

wordcloud.py

子產品結構

wordcloud.py

子產品是

wordcloud

包主要子產品。

wordcloud.py

子產品結構如下,包括:

變量:

FILE

FONT_PATH

STOPWORDS

類:

WordCloud

IntegralOccupancyMap

colormap_color_func

函數:

random_color_func

get_single_color_func

其中

WordCloud

類、

STOPWORDS

變量、

random_color_func

函數、

get_single_color_func

函數暴露到了

wordcloud

包的命名空間。

詞雲生成庫wordcloud詳解(二):wordcloud.py子產品結構、生成顔色接口
  • FILE

    :擷取子產品的實體路徑。
  • FONT_PATH

    :擷取預設字型的實體路徑。
  • STOPWORDS

    :将預設的停用詞表轉換為集合對象(

    set

    )。
  • WordCloud

    :生成詞雲圖的主接口。
  • random_color_func

    :預設顔色生成方式,根據HSL色彩模式随機生成顔色,其中

    hue

    為固定值

    80%

    lumination

    為固定值

    50%

  • get_single_color_func

    :傳回一個傳回值為RGB顔色的函數,顔色轉換依靠

    PIL.ImageColor

    類和内置庫

    colorsys

  • colormap_color_func

    :通過

    matplotlib

    顔色映射表生成一個傳回值為PIL(Pillow)`支援的RGB顔色字元串的函數。
  • IntegralOccupancyMap

    :根據文本詞頻和背景圖構造積分占據栅格地圖,對圖像進行布局。

random_color_func

解讀

random_color_func

功能為根據HSL色彩模式随機生成顔色,其中

hue

為固定值

80%

lumination

為固定值

50%

函數的簽名為:

random_color_func(word=None, font_size=None, position=None, orientation=None, font_path=None, random_state=None)

參數

word, font_size, position, orientation

都将被忽略。

random_state

用于生成随機數字。取值為

random.Random

對象或

None

,預設值為

None

,直接使用

random.Random()

案例:示範

random_color_func

的功能

from wordcloud import random_color_func


# 調用函數随機生成顔色,傳回值為PIL(Pillow)支援的hsl顔色字元串
color=random_color_func()
print(color)
           

輸出為:

hsl(206, 80%, 50%)

源碼

def random_color_func(word=None, font_size=None, position=None,
                      orientation=None, font_path=None, random_state=None):
    if random_state is None:
        random_state = Random()
    return "hsl(%d, 80%%, 50%%)" % random_state.randint(0, 255)
           

colormap_color_func

解讀

colormap_color_func

類的功能為通過

matplotlib

顔色映射表生成一個傳回值為

PIL(Pillow)

支援的RGB顔色的函數。

colormap_color_func

類的簽名為

class colormap_color_func(colormap)

該類隻定義了兩個類,構造方法

__init__

和調用方法

__call__

構造方法

__init__

構造方法簽名為

def __init__(self, colormap)

參數為

colormap

matplotlib

色彩映射表的名稱。字元串。必備參數。

根據源碼

self.colormap = plt.cm.get_cmap(colormap)

可知,

colormap

matplotlib.colors.Colormap

執行個體。

調用方法

__call__

調用方法簽名為

def __call__(self, word, font_size, position, orientation, random_state=None, **kwargs)

參數

word, font_size, position, orientation

都将被忽略。

random_state

用于生成随機數字。取值為

random.Random

對象或

None

,預設值為

None

,直接使用

random.Random()

案例:示範

colormap_color_func

類的功能

import numpy as np
from PIL import ImageColor
import matplotlib.pyplot as plt
from wordcloud.wordcloud import colormap_color_func


# 根據colormap構造函數
color_func=colormap_color_func("autumn")
# 調用函數随機生成顔色,傳回值為PIL(Pillow)支援的RGB字元串
color=color_func(word=None,font_size=None,font_path=None,position=None,orientation=None)
print(color)
# 将字元串轉換為RGB三元組
color_rgb=ImageColor.getrgb(color)
# 顯示最終顔色
plt.subplot(facecolor=np.array(color_rgb)/255)
           

輸出為顔色為

autumn

顔色映射表中的一個随機顔色。

詞雲生成庫wordcloud詳解(二):wordcloud.py子產品結構、生成顔色接口

源碼

class colormap_color_func(object):

    def __init__(self, colormap):
        import matplotlib.pyplot as plt
        self.colormap = plt.cm.get_cmap(colormap)

    def __call__(self, word, font_size, position, orientation,
                 random_state=None, **kwargs):
        if random_state is None:
            random_state = Random()
        r, g, b, _ = np.maximum(0, 255 * np.array(self.colormap(
            random_state.uniform(0, 1))))
        return "rgb({:.0f}, {:.0f}, {:.0f})".format(r, g, b)
           

get_single_color_func

解讀

get_single_color_func

的功能為傳回一個傳回值為RGB顔色的函數。

get_single_color_func

函數的簽名為

def get_single_color_func(color)

參數為

color

取值為

PIL(Pillow)

支援的顔色字元串。

傳回值為一個傳回值為

PIL(Pillow)

支援的RGB顔色字元串。

顔色轉換依靠

PIL.ImageColor

類和内置庫

colorsys

。轉換過程如下:

先通過

PIL.ImageColor

類将

color

參數轉換為

RGB

模式顔色值。

然後再通過

colorsys

子產品将其轉換為

HSV

模式顔色值。

再構造

single_color_func

函數(功能類似于

random_color_func

),該函數将

HSV

模式顔色值轉換為

RGB

模式顔色值,其中

H

S

分量保持不變,

V

分量(明度)取值為

[0.2-1]

之間的随機值。

最後傳回

single_color_func

函數。

案例:示範

get_single_color_func

功能

from PIL import ImageColor
import matplotlib.pyplot as plt
from wordcloud import get_single_color_func

# 調用函數生成顔色
color=get_single_color_func('#ff0000')
# 輸出随機生成的顔色
print(color())
# 将字元串轉換為RGB三元組
color_rgb=ImageColor.getrgb(color())
# 顯示對比輸入顔色和最終顔色
plt.subplot(211,facecolor='#ff0000')
plt.subplot(212,facecolor=np.array(color_rgb)/255)
           

輸出為:

詞雲生成庫wordcloud詳解(二):wordcloud.py子產品結構、生成顔色接口

源碼

def get_single_color_func(color):

    old_r, old_g, old_b = ImageColor.getrgb(color)
    rgb_max = 255.
    h, s, v = colorsys.rgb_to_hsv(old_r / rgb_max, old_g / rgb_max,
                                  old_b / rgb_max)

    def single_color_func(word=None, font_size=None, position=None,
                          orientation=None, font_path=None, random_state=None):
        if random_state is None:
            random_state = Random()
        r, g, b = colorsys.hsv_to_rgb(h, s, random_state.uniform(0.2, 1))
        return 'rgb({:.0f}, {:.0f}, {:.0f})'.format(r * rgb_max, g * rgb_max,
                                                    b * rgb_max)
    return single_color_func
           

繼續閱讀