2018年6月20日水曜日

Matplotlibで明朝体を使えるか

はい,中の人です.
今回はMatplotlibの軸ラベルに明朝体を使おうとした話です.



0.今回使うグラフ
今回は以下のコードを改造しながら進めていきます.(詳しい説明はmatplotlibを紹介しているページへ)

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(-2 * np.pi,2 * np.pi,num=101)
y = np.sin(t)
plt.plot(t,y)

plt.xlabel(u"時間$t$")
plt.ylabel(u"変位$y$")

plt.show()




1.概要
Matplotlibでは軸ラベルの設定ができますが,初期設定のフォントでは日本語を入れると変な文字が出てくるはずです.
そこでこの"変な文字"を回避するため,日本語対応フォントを導入して日本語を表示させてみましょう.

2.やってみた
Matplotlibだとフォント変更は以下の二通りがあります.
①rcParamsでフォントを変える
②font_managerで"なんとか.ttc"を直接参照する

①rcParamsを使ってフォントを変える.
rcParamsを使う場合,最初のコードは以下のようになります.


#-*-coding:utf-8-*-
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["font.family"] = "Yu Mincho"
plt.rcParams["mathtext.fontset"] = "cm"

t = np.linspace(-2 * np.pi,2 * np.pi,num=101)
y = np.sin(t)
plt.plot(t,y)

plt.xlabel(u"時間$t$")
plt.ylabel(u"変位$y$")

plt.show()

これはmatplotlibの設定ファイル(matplotlibrc)を書き換えることでフォントを読み込ませる方式です.この場合,数式フォントと普通の文字のフォントを別々に設定できます.
しかし設定できるフォントに限りがあり,以下のコードで調べられます.


#-*-coding:utf-8-*-
import matplotlib.font_manager as fm

fonts = fm.findSystemFonts()
for f in fonts:
    font = fm.FontProperties(fname=f)
    print(font.get_name())
input(">")


②font_managerで"なんとか.ttc"を直接参照する
font_managerを使う場合は以下のようになります.


#-*-coding:utf-8-*-
import matplotlib.pyplot as plt
import matplotlib.font_manager
import numpy as np

fp = matplotlib.font_manager.FontProperties(fname="C:\Windows\Fonts\msmincho.ttc")

t = np.linspace(-2 * np.pi,2 * np.pi,num=101)
y = np.sin(t)
plt.plot(t,y)

plt.xlabel(u"時間$t$", fontproperties=fp)
plt.ylabel(u"変位$y$", fontproperties=fp)

plt.show()

この場合,"なんとか.ttc"さえ参照できればフォントを適用できることができます..ttcファイルであればフォントの制限もありませんが,数式はデフォルトのフォントが当てられます.

3.完走した感想
もう英語でいいや




©2018 shts All Right Reserved.

0 件のコメント:

コメントを投稿