본문 바로가기

머신러닝/오류 모음집

Word cloud 원하는 색으로 꾸미기 (word cloud customize color)

분석대회를 끝내고, 발표자료를 준비하는데 워드클라우드로 시각화를 한 이미지가 생각보다 안 예쁘더랍니다.

ppt 테마 색 같은 걸 정해놓은 경우엔 미적 감각이 없는 제가 봐도, 이런 부조화가 없더라구요..

그래서 온갖 방법을 찾아봐서! 색을 비교적 원하는 색으로 지정할 수 있는 방법을 알아봤습니다.

 

우선, wordcloud가 깔려있지 않다면 설치해주고, 불러옵시다.

단어조합은 추후 포스트하겠습니다.

pip install wordcloud
from wordcloud import WordCloud, STOPWORDS

 

1. Background Color 변경

white_wordcloud = WordCloud(font_path ="AppleGothic",
                      width=480, height=480,
                      background_color='white').generate(' '.join(words))

black_wordcloud = WordCloud(font_path ="AppleGothic",
                      width=480, height=480,
                      background_color='black').generate(' '.join(words))


fig,ax = plt.subplots(1,2, figsize=(10,5))
fig.tight_layout()
ax[0].imshow(white_wordcloud)
ax[1].imshow(black_wordcloud)

 

background_color를  위와 같이 whitd/ black으로 지정할 수 있습니다.

 

2. Seaborn Palette 사용

그 다음에 할 수 있는 건, seaborn에서 제공하는 palette가 호환이 돼서, 그걸 사용할 수 있습니다.

옵션에 colormap = 'PuBu' 이런 식으로, 원하는 팔레트를 선택하면 됩니다.

palettes = ['spring', 'summer', 'seismic','PuBu']
fig,ax = plt.subplots(2,2)
fig.tight_layout()
axes = [ax[0,0],ax[0,1],ax[1,0],ax[1,1]]
plt.subplots_adjust(wspace=0.1, 
                    hspace=0.1)

for i in range(4):
    wordcloud = WordCloud(font_path ="AppleGothic", 
                      background_color = 'white',
                      width = 480, height=480,
                      colormap = palettes[i]).generate(' '.join(words))
    axes[i].imshow(wordcloud)

 

sns.color_palette에 대해 검색하시거나, seaborn.pydata.org/generated/seaborn.color_palette.html 이 사이트에 들어가시면 더 다양한 palette를 찾으실 수 있습니다.

 

3. Customize, 원하는 색으로 꾸미기

stackoverflow.com/questions/44827346/change-word-color-using-wordcloud-in-python

HSL 이라는 방식의 색 표현 방식을 사용하는 듯 합니다. 전 사실 RGB밖에 몰랐어요...

def color_func(word, font_size, position,orientation,random_state=None, **kwargs):
    return("hsl({:d},{:d}%, {:d}%)".format(np.random.randint(212,313),np.random.randint(26,32),np.random.randint(45,80)))

 

step1. 원하는 색 고르기

이런 모양의 함수로, hsl 괄호 안에 세 개의 정수값이 들어가서 칼라를 정하게 됩니다.

첫번째 숫자를 0으로 고정시키면, 링크에 있는 것처럼  무채색의 워드 클라우드가 됩니다.

저는 LOLCOLORS라는 사이트에서 이 두개의 색 조합으로 워드클라우드를 꾸미기로 했습니다.

첫번째 색은 #AAABD3, 두번째 색은 #CBA6C3 입니다.

 

step2. HSL 좌표 얻고, 원하는 범위 정하기

이 색들의 값을 www.w3schools.com/colors/colors_picker.asp 이 사이트에 검색하면 hsl 좌표를 알 수 있습니다.

#AAABD3 = hsl(239, 32%, 75%),   #CBA6C3 =hsl(313, 26%, 72%) 이 나오네요.

이 두 값 좌표 사이에서 움직이도록 color_func을 조절해주면 됩니다.

첫번째랑 마지막 좌표만 random 범위를 조절해줘도 다채로운 그래프를 그릴 수 있습니다!

마지막 좌표는 값이 작을수록 흰색에 가까워지고, 커질수록 검정색에 가까워져서, 원하는 비율을 맞추면 될 것 같습니다.

 

 

step3. 함수 적용시키기.

lightwordcloud = WordCloud(background_color='white', 
                      width=480, height=480, 
                      font_path ="AppleGothic",
                     color_func = color_func).generate(txt)

plt.imshow(lightwordcloud)

다음 그림은 첫번째 좌표는 239~313, 두번째 좌표는 26~32로 고정해 둔 상태에서, 

세번째 좌표를 10~30, 45~80, 70~90 사이에서 나오도록 한 Word cloud입니다.

원하는 색의 hsl값을 찾아서 그보다 폭 넓게 하면 좀 더 다채로운 워드클라우드를 얻을 수 있습니다.!