隗より始めよ

今後はいろいろ考え始めます。

maplotlibの豆腐化を直す(1年ぶり)

最近matplotlibもよいもんだと思いながら使っていたのだけど、ちょっと使っていたら日本語豆腐化問題に再び当たりました。

以前問題に直面した時、自分がどのように行動したか、それをググってみると以下のようなタイトルが見つかりました。

mazarimono.hatenadiary.jp

私はmatplotlibを見捨てていたw


もくじ


豆腐化というパンドラの箱を開けてしまった

以前の私は問題から逃げていました。まるっと忘れていましたが、豆腐化を避けるためにbokehを使っていたのです。そして問題は解決されぬまま放置されました。

時はたち、豆腐化という問題を忘れ去ってしまったところで、matplotlibを使って再び豆腐化という面倒なパンドラの箱を開けてしまいました。こうなると人間の選べる選択肢は二つ、「問題を避ける」か「問題を解決するか」です。

あれから一年経ち、私は無職になっていま問題に直面して逃げるのは駄目だ。当たって砕けても結果色々学習できるということを知りました。問題がない人生なんて楽しくない。問題を解決するのが楽しいのだ。

そして解決する

解決は簡単になっていました。なぜならPythonユーザーのためのJupyter[実践]入門という良い本が出ていたからです。

PythonユーザのためのJupyter[実践]入門

PythonユーザのためのJupyter[実践]入門

一度ザーッと読んで豆腐化を防ぐ方法が載っていたことを知った私は、アルツな割に読んで10カ月くらい経っても覚えていました。というわけで本を読みながらやってみました。

というわけで簡単なのですが、私は2時間くらいかかってしまいました。

その理由を述べますと、matplotlibには設定ファイルのmatplotlibrcというのがあり、その中身を書き換えて豆腐化を防ぐという方法が、今後何もせずに豆腐化しないやり方なんですが、そのファイルを間違って弄っていたからです。

やり方

本にはいろいろとやり方が載っていますが、長持ち、簡単なやり方をここではご紹介しておきます。

まずは日本語フォントをダウンロードします。本ではsouce han code jpというフォントがダウンロードされています。

それをダウンロードし、そのファイルを開き、フォントをインストールします。(zipの中のOTF ==>SourceHanCodeJP-Regular をダブルクリックすると下のような画面になるのでインストールをクリック)

f:id:mazarimono:20180604115815p:plain

次には参照されているmatplotlibの設定ファイル(以下 matplotlibrc)の場所を調べます。

from matplotlib import matplotlib_fname
matplot_fname()

これでmatplotlibrcがどこにあるか分かります。ここに示されたファイルをまず探し、テキストエディターで開きます。

210行目付近に[#font.sans-serif]という項目があるので、#を消して、フォント名を追加しましょう。この事例によるとSource Han Code JP。

すると何ということでしょう。豆腐化していたチャートが豆腐化しないように。心なしかチャートも大きく(実際に大きくなっています)。
f:id:mazarimono:20180604120522p:plain

これで直面していた問題を解決することができました。

まとめ

まぁ分かれば簡単なんですが、実際これをやるのに私は2‐3時間かかりました。

一つは、フォントがどこに入ったのだろう問題というのでちょっと頭を悩ませたこと。インストール画面を見ればわかりますが、このフォントは「源ノ角ゴシック Code JP」という名前でインストールされるのですが、私は圧縮された状態の名前の「Source Han Code JP」はどこやろーとか探す醜態をさらしました。

もう一つはmatplotlibrcというファイルが二つあり(anaconda内とHOMEディレクトリ内と)、anaconda内のものを触っていたらそちらではない方が参照されていたため、豆腐化が解決されないという問題に直面したことでした。

その際には本を一からやり、またそこで色々と学びました。ぴゃーっと見て関係あるのはこれだなってやり方でも良いのですが、じっくりやると自分の知らなかったことを知れることが多いので良いですね。

効率が悪いことは無駄であるみたいに言われますが、実はその周辺にもっと面白いことが落ちているということは多いですし、そういうやり方もおすすめかもしれません(仕事時間外で)。

初心者にお勧めJupyter notebook

たぶん私はjupyter notebookがなかったらプログラミングを早々と挫折していたと、今JSを勉強していて思います。

Jupyter Notebookの良いところは、下に示したように、この辺りにコードのミスがあるよと知らしてくれるところにあります。そうすると直すのも早い。

f:id:mazarimono:20180605090817p:plain

JSにもそんな奴があるのかもしれないですが、私は知らないのでテキストエディターでやっています。するとミスがあった場合、何も反応がなく一からコードを見ていかないといけないし、間違っているところはたくさんあるので、それは容易でなく、すぐに心が折れます。もう動かんし、バグ1時間も探したし、今日はおしまいに使用みたいなw

というわけで、Pythonを始めようとする人は「みんなのPython」と今回取り上げた「PythonユーザのためのJupyter[実践]入門」を併せ買いしましょう! (ちなみにプログラミングの本に関しましてはできるだけ新しい版のものを購入した方が良いです。私も始め1,000円をケチり、古い版のものなんかを買っていましたが、事例で使われているサービスがなかったりしました。4,000円くらいで知らない知識が仕入れられるなら安いもんだと思うようにしています。)

PythonユーザのためのJupyter[実践]入門

PythonユーザのためのJupyter[実践]入門

みんなのPython 第4版

みんなのPython 第4版