matplotlibを扱う上でたまに遭遇するバグ

前書き

環境構築中にmatplotlibにバグが発生したので備忘録にまとめました。

matplotlibでグラフが表示されない問題

特にエラーを吐かないんですよね・・・
原因もわからないので調査しました。

spyderでプログラムを実行した時、
matplotlibで表示されるグラフがインラインに表示されません。

Agg→Qt5Agg or TkAgg

自分はAnaconda環境で導入したので、
Anaconda3フォルダのどこかに存在するmatplotlibrcファイルを探します。

仮想環境を作成している場合だとanaconda3/envsやlibの下に存在していると思います。
matplotlibの設定ファイルを修正します。
tkAggかqt5Aggを設定すると良いらしいです。

#### CONFIGURATION BEGINS HERE
# the default backend; one of GTK GTKAgg GTKCairo GTK3Agg GTK3Cairo
# CocoaAgg MacOSX Qt4Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG
# Template
# You can also deploy your own backend outside of matplotlib by
# referring to the module name (which must be in the PYTHONPATH) as
# 'module://my_backend'
#backend      : agg

backend      : tkagg
#もしくは   backend      : qt5agg

これでSpyderの再起動をしてプログラムを実行しました。

www.dogrow.net

まだ出力されない場合

上記の状態でコードを動かすと、以下の文章が出ます。

Spyderはプロットを表示せず、このようなメッセージを表示します。「プロットペインのオプションメニューで、「インラインプロットをミュートする」のチェックを外してください。」

Spyderの[ツール]→[プロット]で、
プロット画面を表示させると、
"Mute plot inline"にチェックが入ってしまっているのでこのチェックを外します。

www.it-swarm-ja.tech


matplotlibで文字化けが発生

f:id:electric-city:20200319230845p:plain:w300:h300
文字化け状態

IPAexGothicフォントを使って解決

以下のサイトが分かりやすく丁寧でしたのでオススメです。
qiita.com

Seaborn

以下のサイトを参考にして
linus-mk.hatenablog.com

def set(context="notebook", style="darkgrid", palette="deep",
        font="sans-serif", font_scale=1, color_codes=False, rc=None):

"sans-serif"→"IPAexGothicに改変します。

def set(context="notebook", style="darkgrid", palette="deep",
        font="IPAexGothic", font_scale=1, color_codes=False, rc=None):

まだエラー

Jupyter Notebookを再起動してください。
キャッシュフォルダごと削除します。

Font family ['IPAexGothic'] not found. Falling back to DejaVu Sans.

fontList.py3k.cache だけでは改善しなかったので、.matplotlibごと削除します。
キャッシュフォルダですので、すぐに再び使い続けると新しい.matplotlibフォルダが生成されます。

rm -rf ~/.matplotlib

これで日本語表示が完了しました。

f:id:electric-city:20200320125702p:plain:w300:h300
改善後