"BOKU"のITな日常

興味のむくまま気の向くままに調べたり・まとめたりしてます。

matplotlibに日本語フォントをインストールして、日本語表示できるようにする手順

matplotlibで、日本語表示ができるようにします。

目次

 

手順1:日本語フォントを手にいれる

日本語化と言っても、単にフォントを日本語フォントにする・・というだけです。

matplotlibのデフォルトはsans-selfなので、日本語は表示できません。

まずは、日本語フォントを手にいれます。

窓の杜からダウンロードできます。

forest.watch.impress.co.jp

ダウンロードして解凍します。

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」フォルダがあります。

そこに解凍したフォントファイルをコピーします。

手順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のチュートリアルはこちらにあります。

pypi.org

英語ですけど、たぶん、見たらわかります。

さて、やってみます。

想定として。

なんかのアンケートをとったとしてみます。

例えば、次の選択肢であなたが3年以上の経験のある球技は?という設問。

選択肢は3つ。

にしてみます。

まあ、かなりわざとらしいですが。

まず、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],['サッカー','野球'])

表示されたベン図はこちら。 

 

f:id:arakan_no_boku:20181118234111j:plain

日本語がちゃんと表示されてます。

続けて、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],['サッカー','野球','ラグビー'])

ベン図はこちら 

f:id:arakan_no_boku:20181118234322j:plain

よしよし。

OKですね。