目前
wordcloud
版本:1.81
wordcloud.py
子產品結構
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
包的命名空間。

-
:擷取子產品的實體路徑。FILE
-
:擷取預設字型的實體路徑。FONT_PATH
-
:将預設的停用詞表轉換為集合對象(STOPWORDS
)。set
-
:生成詞雲圖的主接口。WordCloud
-
:預設顔色生成方式,根據HSL色彩模式随機生成顔色,其中random_color_func
為固定值hue
,80%
為固定值lumination
。50%
-
:傳回一個傳回值為RGB顔色的函數,顔色轉換依靠get_single_color_func
類和内置庫PIL.ImageColor
。colorsys
-
:通過colormap_color_func
顔色映射表生成一個傳回值為PIL(Pillow)`支援的RGB顔色字元串的函數。matplotlib
-
:根據文本詞頻和背景圖構造積分占據栅格地圖,對圖像進行布局。IntegralOccupancyMap
random_color_func
解讀
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
的功能
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
colormap_color_func
類的功能為通過
matplotlib
顔色映射表生成一個傳回值為
PIL(Pillow)
支援的RGB顔色的函數。
colormap_color_func
類的簽名為
class colormap_color_func(colormap)
該類隻定義了兩個類,構造方法
__init__
和調用方法
__call__
。
構造方法 __init__
__init__
構造方法簽名為
def __init__(self, colormap)
。
參數為
colormap
:
matplotlib
色彩映射表的名稱。字元串。必備參數。
根據源碼
self.colormap = plt.cm.get_cmap(colormap)
可知,
colormap
為
matplotlib.colors.Colormap
執行個體。
調用方法 __call__
__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
類的功能
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
顔色映射表中的一個随機顔色。
源碼
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
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
功能
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)
輸出為:
源碼
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