目次
Python/matplotlibで日本語表示できるようにする手順
matplotlibで、日本語表示ができるようにします。
それ以前にmatplotlibをインストールしていないなら以下でやっておきます。
pip install matplotlib
さて、ここからは「matplotlib」はインストール済の前提ですすめます。
日本語表示・・といっても、方法は、フォントを日本語フォントにかえるだけです。
matplotlibのデフォルトはsans-selfなので、日本語は表示できません。
手順1:日本語フォントを手にいれる
まずは、日本語フォントを手にいれます。
窓の杜からダウンロードできます。
ダウンロードして解凍します。
ipaexg.ttf (ゴシック)
ipaexm.ttf (明朝)
の2ファイルがコピー対象のフォントファイルです。
手順2:フォントファイルをコピー
上記のフォントファイルを、matplotlibのフォントフォルダにコピーするのですが、環境によって違うので、普通に探すのは大変です。
とりあえず、pythonのプログラムで確認します。
import matplotlib as mplt print(mplt.matplotlib_fname())
これで設定ファイルのパスと設定ファイル名が表示されます。
こんな感じですね。
C:\.........\Anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc
この「matplotlibrc」が設定ファイルなので、その前「mpl-data」までが目的のパスです。
エクスプローラでそのパスに行くと、fontsフォルダがあり、その下に「ttf」フォルダがあります。
そこに解凍したフォントファイルをコピーします。
この時、fontsフォルダが読み取り専用になっていて、コピーしたつもりなのに、ファイルがコピーされていなかった・・なんて原因で、うまくいかないことがあります。
きちんと、コピーされたかどうか?を十分確認ください。
手順3:設定ファイルに追加したフォントを追記
上記フォルダの「matplotlibrc」が設定ファイルです。
これをエディタで開いて以下の部分を探します。
#font.family : sans-serif
この下に以下を追記します。
font.family : IPAexGothic
#font.family : IPAexMincho
上がゴシック。
下が明朝です。
今回はゴシックを使うので、ゴシックのコメントをはずしてます。
明朝の場合は逆にします。
ただ、自分は明朝を普段使っていません。
なので、直近で動作確認できてるわけではありません。
動作確認済で確実な方がよければ、上記と同じゴシックにしてください。
手順4:フォントキャッシュを削除
上記でフォントの設定はできたのですが、ちょっと落とし穴があります。
それはフォントキャッシュの存在です。
いくら設定を変更しても、フォントキャッシュが残っている限り、matplotlibはフォントを変更してくれないみたいなのです。
なので、フォントキャッシュを消します。
といっても、どこにあるかわからないので、Pythonのプログラムで探します。
import matplotlib as mplt print(mplt.get_configdir())
これで表示されたフォルダを開きます。
C:\Users\・・・・・\.matplotlib
隠しファイルなので、エクスプローラの設定によっては表示されない場合もあるので、そのへんは調整してください。
このフォルダにある「fontList.json」がフォントキャッシュファイルなので、これを消します。
手順5:設定がうまくいったか確認
上記までやったらOKです。
念のため、pythonのプログラムで確認してみます。
import matplotlib as mplt print(mplt.rcParams['font.family'])
これで「IPAexGothic」とか設定した名称が表示されていれば設定OKです。
動作確認に「ベン図」を描くサンプル
日本語化したので、集合(set)を使ってベン図を書いてみます。
ベン図をPythonで描くには、matplotlib以外に、matplotlib_vennが必要です。
Anacondaにもデフォルトでははいっていません。
でも、ベン図ってわりと使うので、インストールしておくと何気に便利です。。
pip install matplotlib-venn
matplotlib_vennのチュートリアルはこちらにあります。
英語ですけど、たぶん、見たらわかります。
さて、やってみます。
想定として。
なんかのアンケートをとったとしてみます。
例えば、次の選択肢であなたが3年以上の経験のある球技は?という設問。
選択肢は3つ。
- サッカー(s1)
- 野球(s2)
- ラグビー(s3)
にしてみます。
まあ、かなりわざとらしいですが。
まず、2つの集合(s1、s2)のベン図です。
from matplotlib_venn import venn2 import matplotlib.pyplot as plt def draw_venn2(sets,labels): venn2(subsets=sets,set_labels=labels) plt.show() s1 = set(['a','b','c','d']) s2 = set(['e','f','g','a','c']) draw_venn2([s1,s2],['サッカー','野球'])
表示されたベン図はこちら。
日本語がちゃんと表示されてます。
続けて、3つの集合のベン図です。
from matplotlib_venn import venn2,venn3 import matplotlib.pyplot as plt def draw_venn3(sets,labels): venn3(subsets=sets,set_labels=labels) plt.show() s1 = set(['a','b','c','d']) s2 = set(['e','f','g','a','c']) s3 = set(['a','c','z','y','x']) draw_venn3([s1,s2,s3],['サッカー','野球','ラグビー'])
ベン図はこちら
よしよし。
OKですね。