Skip to content

Instantly share code, notes, and snippets.

@dogrunjp
Last active May 5, 2018 05:57
Show Gist options
  • Save dogrunjp/f46b13b8dd8195225eab to your computer and use it in GitHub Desktop.
Save dogrunjp/f46b13b8dd8195225eab to your computer and use it in GitHub Desktop.
ipython notebookのmatplotlibで日本語を利用するには

ipython notebookのmatplotlibで日本語を表示するには

データの計算過程と計算結果をそのまま残して保存できるipython notebookは、集計・分析のプロセスをオープンに共有したいような用途には最適なツールです。Anaconda3系でインストールしたipython notebookはPython3.xなため、コードの中で日本語も利用できます。政府の統計データなどは、カラムの値からインデックスまで日本語だらけになるので、そちらの向きのデータを集計するのならPython3系のipythonを利用しない理由はない!ということになります。

ただし、Python3自体はデフォルトでunicodeに対応していて日本語の記述が可能なのですが、matplotlibを使ってチャートをレンダリングする場合は日本語フォントを明示的に指定する必用があります。(指定しないと日本語が豆腐に置き換わります)

matplotlibの日本語対応は複雑なものではないのですが、参考となる資料があまりまだ無いようなので、自分の設定をメモしておきます。

Python3系のconfiguration

まず、前提としてconfigファイルを置く必用があるとのことで、pyenv localでanaconda3を指定したディレクトリに以下のファイルを設定します。

ipython_kernel_config.py

nlineBackend.rc = {
    'font.size': 14,
    'font.family': 'Osaka',
    'figure.figsize': (12.0, 8.0),
    'savefig.dpi': 80,
    'axes.titlesize': 12
}

c.InlineBackend.figure_formats = set(['png', 'retina'])

下で説明する”その2”の方法では、このファイル要らないような気がしないでも無いのですが試していません。

参考 Jupyterで日本語ラベルを使ったグラフを描画する

notebookの記述その1(都度設定バージョン)

from matplotlib import font_manager
fontprop = matplotlib.font_manager.FontProperties(fname="/Library/Fonts/Osaka.ttf")
ax = df.plot()
ax.set_ylabel('値1', fontdict = {"fontproperties": fontprop})
ax.set_xlabel('値2', fontdict = {"fontproperties": fontprop})

このような記述で描画したチャート無いの日本語にも選択した日本語フォントが適用されます。

ただしこの方法には少し問題があって、たとえばレジェンドやticksの値(データ内の何らかの文字列)が日本語で有った場合日本語fontが適用できず、文字は豆腐の形のままになってしまいます。

notebookの記述その2(一括して設定できてそうなバージョン)

いろいろ調べていると、matplotlib.font_manager.FontPropertiesを設定しない簡単な方法でしかも一括で日本語フォントの設定が出来ている解説がありました。

font = {'family':'Osaka'}
matplotlib.rc('font', **font)

…簡単。じっさい自分でスクリプトを書いてみても上手く動きました。この感じMacにインストールしたipythonでのみ日本語フォントが使えるような書き方のような気もしないではないですが……。

以上!

参考 pandasのplotで日本語を使う

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment