質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.58%

wordcloudで日本語をぼやけさせずに表示したい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,101

score 13

 前提・実現したいこと

フォントを変更して日本語表示させたいと色々試行錯誤してみましたが、
どうしても文字がぼやけます。
どうしたら文字がぼやけずにできるでしょうか?

なにもエラーメッセージはでていません。
wordで確認すると文字を大きくしてもぼやけないので、フォントには問題ないと思います。
なにかしらの設定が間違っているのだと思うのですが、ご存じの方教えてください。

日本語の設定は下記のようにしました。
C:\Users\[ユーザー名]\Anaconda3\Lib\site-packages\matplotlib\mpl-data\fonts\ttf の中に07LogoTypeGothic7.ttfを貼り付け
C:\Users\[ユーザー名]\Anaconda3\Lib\site-packages\matplotlib\mpl-data
の中にあるmatplotlibrcというファイルをダブルクリックしてメモ帳を開き
font.family : sans-serifを削除してfont.family : 07LogoTypeGothic7 書き換えて
matplotlibrcファイルを上書き保存
C:\Users\[ユーザー名]\.matplotlib にあるfontList.jsonを削除
C:\Users\[ユーザー名]\Anaconda3\Lib\site-packages\matplotlib\mpl-data
の中にあるmatplotlibrcファイルをコピーして
C:\Users\[ユーザー名]\.matplotlib の中に貼り付け

windows10 64bit
anaconda 3 64bit
jupyter notebook
python3.6.5
wordcloud1.4.1
使用したいフォント 07LogoTypeGothic7.ttf

#coding:utf-8 

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
import os#import random
from PIL import Image
from os import path
from wordcloud import WordCloud, STOPWORDS
from wordcloud import WordCloud
text ="北海道 北海道 京都府 京都府 北海道 沖縄県 沖縄県 青森県 岩手県 宮城県 秋田県 山形県 福島県 茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県 新潟県 富山県 石川県 福井県 山梨県 長野県 岐阜県 静岡県 愛知県 三重県 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県 鳥取県 島根県 岡山県 広島県 山口県 徳島県 香川県 愛媛県 高知県 福岡県 佐賀県 長崎県 熊本県 大分県 宮崎県 鹿児島県 沖縄県"
wordcloud = WordCloud(background_color="white",color_func=color_func, font_path=r"C:\WINDOWS\Fonts\07LogoTypeGothic7.ttf").generate(text)
plt.figure(figsize=(10,10), dpi=300)
plt.axis("off")
plt.imshow(wordcloud, interpolation="bilinear")
plt.show()

 試したこと

1行目に# coding= shift_jisも試してみましたがぼやけるのは変わりません。
他のフォントでも試してみました。

追記
特に小さい文字が潰れてぼやけてしまいます。
 特に小さい文字がつぶれてぼやけます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2018/09/17 22:07

    interpolationを変更したら変化しますか。

    キャンセル

  • sakusaku76

    2018/09/17 23:11

    回答ありがとうございます。interpolationを'nearest'・'none'・'linear'・’interpolation'・ ‘lower’・ ‘higher’・ ‘midpoint’で試してみましたがぼやけるのは直りませんでした。

    キャンセル

  • ikadzuchi

    2018/09/19 09:49

    とりあえずぼけがどのようなものか画像を貼るとわかりやすいと思います。

    キャンセル

回答 2

checkベストアンサー

+2

matplotlib の imshow() で表示する場合、画像は描画領域の大きさに合わせてリサイズされますので、原寸大で表示したい場合は向いていません。
(うまく dpi を計算すれば、原寸大で表示できないこともないですが、少し面倒です。)

WordCloud クラスに以下のメソッドがありますので、原寸大で表示してみて、それでも質問者さんの基準でぼやけているか確認してみてください。

  • to_file(): ファイルに保存する。
  • to_array(): 形状が (Height, Width, 3) の numpy 配列として取得する。

font_path はフォント名でもよいみたいです。

import numpy as np
from wordcloud import WordCloud

text = "北海道 北海道 京都府 京都府 北海道 沖縄県 沖縄県 青森県 岩手県 宮城県 秋田県 山形県 福島県 茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県 新潟県 富山県 石川県 福井県 山梨県 長野県 岐阜県 静岡県 愛知県 三重県 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県 鳥取県 島根県 岡山県 広島県 山口県 徳島県 香川県 愛媛県 高知県 福岡県 佐賀県 長崎県 熊本県 大分県 宮崎県 鹿児島県 沖縄県"
wordcloud = WordCloud(background_color="white",
                      font_path="TakaoPGothic",
                      width=640,
                      height=480)

# テキストからワードクラウドを生成する。
wordcloud.generate(text)

# ファイルに保存する。
wordcloud.to_file('wordcloud.png')

# numpy 配列で取得する。
img = wordcloud.to_array()
print(img.shape)  # (480, 640, 3)

イメージ説明

wordcloud の API リファレンス

 ウィンドウに表示したい場合

import cv2

cv2.namedWindow('word cloud', cv2.WINDOW_NORMAL)
cv2.imshow('word cloud', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 IPython Notebook に表示したい場合

import IPython.display
from io import BytesIO
from PIL import Image

def show_array(img):
    stream = BytesIO()
    Image.fromarray(img).save(stream, 'png')
    IPython.display.display(IPython.display.Image(data=stream.getvalue()))

show_array(img)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/09/20 09:32

    ウィンドウに表示したい場合・ IPython Notebook に表示したい場合
    両方とも小さい文字がつぶれずに読めるようになりました!
    とてもわかりやすい回答ありがとうございました!!

    キャンセル

+1

interpolationをbilinearからnoneにすればぼけなくなりそうに思います。
すみませんコメント見逃しておりました。

これだけだとあれなのでもうひとつの可能性についても書いておきますと、
もしあなたのいうぼけがアンチエイリアスによるもので、求めているのがWindowsのようなピクセルのグリッドにフィットした描画だった場合、フォントの描画エンジンの話になるので、多分環境自体の設定を変えるとかライブラリの中に手を入れるとかになります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/09/20 01:51

    回答ありがとうございます。
    アンチエイリアスの扱いがよくわからないのですが、どのように設定するのがいいのでしょうか?
    環境自体の設定を変えるとなるとインストールからやりなおした方がいいかもしれません...

    キャンセル

  • 2018/09/20 09:40

    アンチエイリアスについては問題ありません。
    質問の画像は、ぼけているというより、適切にアンチエイリアス・グリッドフィッティングを効かせて描画されたものを最後に引き延ばしている状況に見えます。
    tiitoiさんの指摘どおり適切な解像度で表示されれば問題はないでしょう。

    キャンセル

  • 2018/09/20 09:49

    アンチエイリアスについての説明ありがとうございます。
    おかげさまで小さい文字もぼやけずに読めるようになりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る