Matplotのグラフにフォントを指定する

Matplotを使ってグラフを描いた場合、環境によって文字が表示されないことがあります。 そんな時には、好きなフォントを設定してみましょう。

フォントを指定しない場合

まずは普通にsinグラフを描いてみましょう。

import numpy as np
import matplotlib.pyplot as plt

# x軸の範囲を設定
x = np.linspace(-np.pi, np.pi, 300)

# sinのグラフを描画
plt.plot(x, np.sin(x))

# グラフのタイトルの設定
plt.title('Sin(x) のグラフ')

# x軸、y軸のラベルを設定
plt.xlabel('x')
plt.ylabel('y')

# グラフを表示
plt.show()

これで描画すると、こう表示されます。「Sin(x) のグラフ」のなかの「のグラフ」の文字が豆腐になってしまっていますね……。

フォントを指定した場合

そこで、ヒラギノフォントを指定してみましょう。 (ついでに、retina解像度で表示するための設定も追加。)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

# retina解像度で表示するための設定
%config InlineBackend.figure_format = 'retina'

# ヒラギノを指定する
hiragino_font = fm.FontProperties(fname='/System/Library/Fonts/ヒラギノ角ゴシック W0.ttc')
plt.rcParams['font.family'] = hiragino_font.get_name()

# x軸の範囲を設定
x = np.linspace(-np.pi, np.pi, 300)

# sinのグラフを描画
plt.plot(x, np.sin(x))

# グラフのタイトルの設定
plt.title('Sin(x) のグラフ')

# x軸、y軸のラベルを設定
plt.xlabel('x')
plt.ylabel('y')

# グラフを表示
plt.show()

日本語の文字がちゃんと表示されて、Retina指定でグラフもくっきり表示されていますね。

システムのフォントの取得

システムで利用可能なフォントの取得はこれで大丈夫。

import matplotlib.font_manager as fm

# フォントのリストを取得
font_list = fm.findSystemFonts()

# フォントを表示
for font in font_list:
    print(font)