1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Python]Matplotlibで任意の日本語フォントを表示する。

Posted at

今さらこの記事を書く意義は?

これまでも同様の無いようでQiitaにも多数の記事が投稿され、Webでも検索すれば、数えきれないほどの資料が見つかりますが、あえて少し視点を変えて、解説させていただきます。

ここでは、特にGoogle ColaboratoryWatson Studioという、基本的にデータを永続化出来ない環境でのMatplotlibを想定した日本語フォントを導入方法を紹介します。

Google Colaboratoryに関しては、Androidのユーザーであれば必ずと言っていいほど登録済みのGooleアカウントでサイトにアクセスして、利用規約に同意するだけで容易に新規ノートブックを作成していただけます。

IBM Cloudに関しては、アカウントお持ちで無い方が多いとは思いますが、サインアップは済んでいるものとして進めさせていただきます。

始めに、ご存じ無い方のためにWatson Studioを開始するまでの手順をかいつまんで解説しておきます。まずはログイン後のダッシュボードの画面の右上にあるリソースの追加をクリックします。
image.png

次のカタログの画面で、左側のカテゴリーのリストからAI / Machine Learningを選びます。
image.png

次のページで目的のWatson Studioが選べます。
image.png

作成画面に遷移しますと、任意でロケーションを変更可能ですが、右下の使用条件に同意さえすれば、無料プランで作成ボタンがクリック出来るようになります。
image.png

サービスが作成され、ページが変わったら、Launch in Cloud Pak for Dataというボタンをクリックします。
image.png

ようこその画面になりますので、新規にプロジェクトを作成します。
image.png

プロジェクトの作成では、差し当たり空のプロジェクトを選択します。
image.png

次は任意のプロジェクト名を入力すれば、作成ボタンがアクティブになります。
image.png

プロジェクトのトップページが表示されたら、プロジェクトに追加ボタンで資産タイプの選択が出現されるのでNotebookを選びます。
image.png

後はNotebook名を入力するだけです。ランタイムは特に高いスペックを必要としないのであれば、低いスペックにしておいたほうが、稼働時間を長くできます。
image.png

白紙のNotebookが表示されたら準備完了です。お疲れさまでした。早速コードを入力して実行してみましょう。
image.png

まず日本語フォント未登録だと、どうなるか...

単なるサンプルなので意味の無いデータですが、今回は以下のコードをセルに入力し、グラフを表示します。

import numpy as np
x = np.arange(-np.pi, np.pi, 0.25)

from matplotlib import pyplot as plt
plt.plot(x, np.sin(x), marker='o', label=u'sinカーブ', color='gray')
plt.plot(x, 2*np.sin(x), marker='x', label=u'sin2カーブ', color='red')
plt.plot(x, np.cos(x), marker='.', label=u'円周率π', color='blue')
plt.xlabel(u'スケール')
plt.ylabel(u'ラジアン')
plt.legend()
plt.figtext(x=0, y=0, s=u'三角関数')
plt.grid(axis='x', color='pink', alpha=0.5, linewidth=1, linestyle='--')
plt.grid(axis='y', color='cyan', alpha=0.5, linewidth=1, linestyle=':')

すると大量のエラーが出力された後、全角のフォントがいわゆる「豆腐」の状態となり、それぞれ以下のように表示されます。

Google Colaboratory
image.png

Watson Studio
image.png

Plotに日本語フォントを一括適用する

日本語フォントはそれぞれ好みのものを選択して構いませんが、ここでは直接リンクからZipファイルをダウンロードできるSource Han Code JPを採用します。

まず下記のコードでダウンロードしてから、目的のファイルを抽出し保存します。

import requests
from zipfile import ZipFile
from io import BytesIO
from matplotlib import font_manager as fm

font_url = 'https://github.com/adobe-fonts/source-han-code-jp/archive/2.011R.zip'
font_zip = requests.get(font_url)
font_set = BytesIO(font_zip.content)
font_path = 'source-han-code-jp-2.011R/OTF/SourceHanCodeJP-Regular.otf'
ZipFile(font_set, 'r').extract(font_path)
font_set.close()

さらに、フォントファイルをfont_managerに登録した上で、matplotlib.pyplotに既定のフォントとして一括適用します。
手っ取り早く日本語フォントを表示するためだけであれば、これでよいのではないかと思います。

from matplotlib import pyplot as plt, font_manager as fm
fm.fontManager.addfont(font_path)
font_prop = fm.FontProperties(fname=font_path)
plt.rc('font', family=font_prop.get_name())

実際に日本語フォントを表示してみる。

準備が出来たところで、冒頭のコードを同じように実行すると、それぞれ以下のように表示されます。

Google Colaboratory
image.png

Watson Studio
image.png

個別にフォントの設定を調整する場合

グラフの見栄えにこだわるのであれば、font_propertiesというパラメータにmatplotlib.font_manager.FontPropertiesを渡すことにより、個別にフォントを調整することが出来ます。
下記にフォントのサイズや太さを変更するサンプルを示します。

x = np.arange(-np.pi, np.pi, 0.25)
plt.plot(x, np.sin(x), marker='o', label='sinカーブ', color='gray')
plt.plot(x, 2*np.sin(x), marker='x', label='sin2カーブ', color='red')
plt.plot(x, np.cos(x), marker='.', label='円周率π', color='blue')
font_prop.set_size(12.0)
plt.xlabel('スケール', font_properties=font_prop)
plt.ylabel('ラジアン', font_properties=font_prop)
font_prop.set_size(18.0)
font_prop.set_weight('extra bold')
plt.figtext(x=0, y=0, s='三角関数', font_properties=font_prop)
plt.grid(axis='x', color='pink', alpha=0.5, linewidth=1, linestyle='--')
plt.grid(axis='y', color='cyan', alpha=0.5, linewidth=1, linestyle=':')
font_prop.set_size(9.0)
font_prop.set_weight('ultralight')
plt.legend(prop=font_prop)

Google Colaboratory
image.png

Watson Studio
image.png

終わりに

毎回、フォントファイルの入手からの作業となることを念頭に、出来るだけ小さいオーバーヘッドで、かつ汎用的に利用出来るコードとなるよう、配慮したつもりです。

実際のところ、普段は下記の記事に書いているようにGoogle Cloud ShellJupyter Labを利用しています。

そのためGoogle ColaboratoryもWatson Studioも最近はほとんどアクセスすることがありません。今回の記事を書くために久々に利用したので、少し新鮮に感じられました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?