准备
导入必要的库
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
生成mask/mask transform
总的来说:就是通过导入自己相要的图片作为mask遮罩
mask遮罩其实是一个代表形状的二维数组,所以我们要通过np.array()将图片转化为二维数组。
有些朋友会发现即使np.array()后mask依旧未生效,因为mask的格式不同结果往往不太一样,这时候需要transform一下(如果我们看下生成的矩阵,矩阵的数值代表像素的强度,255是纯白,1是黑色,我们的目的就是通过mask将图片的形状勾勒出来,使得wordcloud方法能正常运行)
def transform_mask(imagename):
#这里使用的jpg,文件后缀根据自己情况改哦!
mask = np.array(Image.open(f"./{imagename}.jpg"))
mask = mask[:,:,0] # transform 3d image to 2d for easier visualization
# 将
def transform_format(val):
if val.any()== 0:
return 255
else:
return val
# Transform your mask into a new one that will work with the function
transformed_mask = np.ndarray((aatrox_mask.shape[0],aatrox_mask.shape[1]), np.int32)
for i in range(len(aatrox_mask)):
transformed_mask[i] = list(map(transform_format,aatrox_mask[i]))
return transformed_mask
字云颜色按图片设定
def get_image_colors(imagename):
mask = np.array(Image.open(f"./{imagename}.jpg"))
image_colors = ImageColorGenerator(mask)
return image_colors
导入图片
# Create a word cloud image
wc = WordCloud(
background_color="white",
max_words=1000,
mask=transformed_mask,
stopwords=STOPWORDS,
contour_width=3)
# Generate a wordcloud
wc.generate(text) # text实质上是字频字典frequent dictionary
# show
plt.figure(figsize=[20,10])
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()
参考链接
更多推荐