幾行代碼教你使用python製作詞雲(五)
今天繪製的詞雲是按照模板的顏色進行詞雲填充,大致(對比圖)如下
補充:原生詞雲圖(左)、按模板圖片顏色的詞雲圖(中)和模板圖片(右)
1.準備數據和源圖片
數據:蠟筆小新介紹
圖片:蠟筆小新
2.代碼分析
導入繪圖庫matplotlib和詞雲製作庫wordcloud
# 導入繪圖庫matplotlib和詞雲製作庫wordcloud
import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator
載入數據
# 將外部文件包含的文本保存在text變量中
text = open('./data/XiaoXin.txt',encoding='utf-8').read()
載入數據圖片
# 導入imageio庫中的imread函數,並用這個函數讀取本地圖片queen2.jfif,作爲詞雲形狀圖片
import imageio
mk = imageio.imread("./input/xiaoxin.jpg")
構建詞雲對象wc
# 構建詞雲對象w,傳參
wc = WordCloud(background_color="white",
scale=15,
contour_width=1,
contour_color='steelblue',
mask=mk,)
# 將text字符串變量傳入w的generate()方法,給詞雲輸入文字
wc.generate(text)
圖像處理
# 調用wordcloud庫中的ImageColorGenerator()函數,提取模板圖片各部分的顏色
image_colors = ImageColorGenerator(mk)
# 顯示原生詞雲圖、按模板圖片顏色的詞雲圖和模板圖片,按左、中、右顯示
fig, axes = plt.subplots(1, 3)
# 最左邊的圖片顯示原生詞雲圖
axes[0].imshow(wc)
# 中間的圖片顯示按模板圖片顏色生成的詞雲圖,採用雙線性插值的方法顯示顏色
axes[1].imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
# 右邊的圖片顯示模板圖片
axes[2].imshow(mk, cmap=plt.cm.gray)
for ax in axes:
ax.set_axis_off()
plt.show()
# 給詞雲對象按模板圖片的顏色重新上色
wc_color = wc.recolor(color_func=image_colors)
輸出並導出結果圖片
# 在控制檯繪製並輸出圖像
plt.imshow(wc,interpolation="bilinear")
plt.axis("off")
# 將詞雲圖片導出到當前文件夾
wc.to_file('./output/xiaoxin1.png')
3.完整代碼
# -*- coding: utf-8 -*-
"""
Created on Mon Jun 4 10:20:21 2020
@author: Jay-L
"""
# 導入繪圖庫matplotlib和詞雲製作庫wordcloud
import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator
# 將外部文件包含的文本保存在text變量中
text = open('./data/XiaoXin.txt',encoding='utf-8').read()
# 導入imageio庫中的imread函數,並用這個函數讀取本地圖片queen2.jfif,作爲詞雲形狀圖片
import imageio
mk = imageio.imread("./input/xiaoxin.jpg")
# 構建詞雲對象w
wc = WordCloud(background_color="white",
scale=15,
contour_width=1,
contour_color='steelblue',
mask=mk,)
# 將text字符串變量傳入w的generate()方法,給詞雲輸入文字
wc.generate(text)
# 調用wordcloud庫中的ImageColorGenerator()函數,提取模板圖片各部分的顏色
image_colors = ImageColorGenerator(mk)
# 顯示原生詞雲圖、按模板圖片顏色的詞雲圖和模板圖片,按左、中、右顯示
fig, axes = plt.subplots(1, 3)
# 最左邊的圖片顯示原生詞雲圖
axes[0].imshow(wc)
# 中間的圖片顯示按模板圖片顏色生成的詞雲圖,採用雙線性插值的方法顯示顏色
axes[1].imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
# 右邊的圖片顯示模板圖片
axes[2].imshow(mk, cmap=plt.cm.gray)
for ax in axes:
ax.set_axis_off()
plt.show()
# 給詞雲對象按模板圖片的顏色重新上色
wc_color = wc.recolor(color_func=image_colors)
# 在控制檯繪製並輸出圖像
plt.imshow(wc,interpolation="bilinear")
plt.axis("off")
# 將詞雲圖片導出到當前文件夾
wc.to_file('./output/xiaoxin1.png')