82503


Jupyter NotebookでWord Cloudを作成したいのですが、添付画像のように画質が粗いです。  
画質をよくする方法を教えて下さい。コードはPythonで書いています。

[![出力画像](https://i.stack.imgur.com/h4pDN.jpg)](https://i.stack.imgur.com/h4pDN.jpg)

コードは以下です。

[code]

    import pandas as pd
    
    from janome.tokenizer import Tokenizer
    
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    from PIL import Image
    from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
    
    ## データ読み込み
    df = pd.read_csv('sample.csv', header=None)
    ## タイトルを付与
    df = df.rename(columns={0:'sentences'})
    df.head()
    
    ## 関数群の定義
    def get_nouns(sentence, noun_list):
        for token in t.tokenize(sentence):
            split_token = token.part_of_speech.split(',')
            ## 一般名詞を抽出
            if split_token[0] == '名詞' and split_token[1] == '一般':
                noun_list.append(token.surface)
    
    def depict_word_cloud(noun_list):
        ## 名詞リストの要素を空白区切りにする(word_cloudの仕様)
        noun_space = ' '.join(map(str, noun_list))
        mask_array = np.array(Image.open('sample.png'))
      
        ## word cloudの設定(フォントの設定)
        wc = WordCloud(mask=mask_array, 
                       background_color="white",
                       # カラーマップ
                       colormap="cool",
                       font_path='/System/Library/Fonts/ヒラギノ明朝 ProN.ttc', 
                       width=10000,height=10000)
        
        wc.generate(noun_space)
        ## 出力画像の大きさの指定
        plt.figure(figsize=(15,15))
        
        ## 目盛りの削除
        plt.tick_params(labelbottom=False,
                        labelleft=False,
                        labelright=False,
                        labeltop=False,
                       length=0)
        ## word cloudの表示
        plt.imshow(wc)
    
        plt.savefig('sample2.png')
        plt.show()
    
    ## 形態素解析の準備
    t = Tokenizer()
    
    noun_list = []
    for sentence in list(df['sentences']):
        get_nouns(sentence, noun_list)
    
    depict_word_cloud(noun_list)
    
[/code]


CC BY-SA 4.0
2021-09-14T08:32:20.473
82482
2021-09-15T10:28:24.703
2021-09-15T03:08:19.630
3060
48200
question
python 機械学習 anaconda jupyter-notebook
Jupyter NotebookでWord Cloudを作成したいのですが、画質が粗いです。


以下は単純化したものです。画像サイズは 1920x1080  
Ubuntuのコードなのでフォントのパスは異なるけど, それ以外はたぶん動くはず  
これで試すとどうでしょう

[code]

    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    
    def plot_wordcloud(wordcloud):
        plt.imshow(wordcloud)
        plt.axis('off')
        plt.show()
        #wordcloud.to_file("wordcloud.png")
    
    text = 'I have a pen. I have an apple. 青い空 白い雲 海が好き'
    wcloud = WordCloud(
        stopwords={'have', 'a', 'an'},
        background_color='white',
        font_path='/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc',
        width=1920, height=1080).generate(text)
    plot_wordcloud(wcloud)
    
[/code]

あるいは

[code]

    # plot_wordcloud(wcloud)
    # 
    
    # wcloud.to_file("wordcloud.png")
    wcloud.to_image()
    
[/code]

* * *

これで画像を生成した場合

  * 画質が粗いものが生成される場合 … 原因不明。フォントファイルの違い？
  * 画質が正常な場合 … `WordCloud`に指定してるパラメーター `width=`, `height=`, あるいは `mask=` の画像がぼやけてるなどの理由が(とりあえず)考えられます


CC BY-SA 4.0
2021-09-15T09:32:31.250
82503
2021-09-15T10:28:24.703
2021-09-15T10:28:24.703
43025
43025
82482
answer