読者です 読者をやめる 読者になる 読者になる

HYT Machineworks 作業日誌

やったこととか思いついたことをメモしておくブログです。

Google Noto Fontsを使ってmatplotlibとseabornでNo 豆腐する(Windows)

以前、ライブラリの大本のフォント設定を変える方法での対応をメモした。

hytmachineworks.hatenablog.com

だが、Google様とAdobe様がフリーの豆腐をなくすためのフォントを公開してくださったので、システムにフォントをインストールし、使用する方法に変えたのでそれをメモする

このフォントは、公開しているサイトによると

Google Noto Fonts

Google has been developing a font family called Noto, which aims to support all languages with a harmonious look and feel. Noto is Google’s answer to tofu. The name noto is to convey the idea that Google’s goal is to see “no more tofu”. Noto has multiple styles and weights, and is freely available to all. 

 とのことで、豆腐撲滅から来ているようです。

1.fontのインストール

今回インストールするのは、"Noto Sans CJK JP"と"Noto Serif CJK JP"です。

公開しているサイトでjapaneseと検索すれば出てくるのでそれぞれダウンロードし、解凍しましょう。インストールは、下の図のように、解凍してから拡張子がotfの物をすべて選択して右クリックしてインストールをクリックすればインストールは完了です。ただし、管理者権限が必要です。適宜権限を付与して実行してください。

 f:id:hytmachineworks:20170507182121p:plain

2.matplotlibの対応

前回の方法と同様に自分のローカルの.matplotlibにコピーしたmatplotlibrcをいじるのですが。今回は、追記するのは以下の2行

font.serif:Noto Sans CJK JP
font.sans-serif:Noto Sans CJK JP

 後は、fontList.py3k.cacheを削除すればOK。で試し書き

import matplotlib.pyplot as plt
plt.plot([1, -1, -1, 1, 1], [1, 1, -1, -1, 1])
plt.title('四角い 豆腐')
plt.show()

実行結果は、下の通りでちゃんと表示されています。

f:id:hytmachineworks:20170507195818p:plain

3.seabornの対応

最後の、seabornの設定ですが、対策は、2つあると思っていて

option #1前回参考にしたサイトで対処療法と言っている毎回コード内で指定する

import seaborn as sns
sns.set(font="Noto Sans CJK JP") # フォントの指定
sns.plt.plot([1, -1, -1, 1, 1], [1, 1, -1, -1, 1])
sns.plt.title('四角い 豆腐')
sns.plt.show()

と思ったのがアップグレードの度にrcmod.pyが書き換わるので毎回直すならコードに書いておいたほうが楽かと思ったり。

option #2. rcmod.pyの177-196行あたりの# Common parametersを弄る

# Common parameters
style_dict = {
                    "figure.facecolor": "white",
                    "text.color": dark_gray,
                    "axes.labelcolor": dark_gray,
                    "legend.frameon": False,
                    "legend.numpoints": 1,
                    "legend.scatterpoints": 1,
                    "xtick.direction": "out",
                    "ytick.direction": "out",
                    "xtick.color": dark_gray,
                    "ytick.color": dark_gray,
                    "axes.axisbelow": True,
                    "image.cmap": "Greys",
                    "font.family": ["sans-serif"],
                    # "font.sans-serif": ["Arial", "Liberation Sans",
                    # "Bitstream Vera Sans", "sans-serif"],
                    "grid.linestyle": "-",
                    "lines.solid_capstyle": "round",
                    }

 赤い太字にした、"font.sans-serif"の行をコメントアウトする。んで下のでテスト

import seaborn as sns
sns.plt.plot([1, -1, -1, 1, 1], [1, 1, -1, -1, 1])
sns.plt.title('四角い 豆腐')
sns.plt.show()

両方共結果は下の通り

f:id:hytmachineworks:20170507195151p:plain

いいね。matplotlibとseaborn両方共ギチギチに書いたから四角を書いてるのかよくわかんなくなったけどとりあえず成功ということで