概要
Ubuntu 22.04の仮想環境(venv)でmatplotlibを使っていたところ、plt.show()
でグラフが表示されず、以下のような警告が出た。
UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown
これはPyQt5をインストールすることで解決した。
この記事ではそのとき調べたことをまとめる。
問題
matplotlibには複数のバックエンドがある。
バックエンドとは、描画をどの方法で行うかを決定する仕組みのこと。
バックエンドには、ウィンドウ表示ができるもの(インタラクティブなもの)とできないもの(非インタラクティブなもの)がある。
matplotlibは起動時に利用可能なGUIライブラリを探して、自動的に使えるバックエンドを選択する。
インタラクティブな表示を可能にするためには、GUIライブラリを仮想環境にインストールする必要があった。
解決方法
PyQt5をインストールした。
pip install pyqt5
他にもTkinter(python3-tk)などでもうまくいくはず。
PyQt5やTkinterなどのGUIライブラリがインストールされていれば、matplotlibが自動で選んでくれる。
今回はqtaggを自動で選んでくれるようになった。
確認方法
現在のバックエンドは以下のようにして確認できる。
import matplotlib
print(matplotlib.get_backend())
まとめ
matplotlibでグラフが表示されない場合はまずバックエンドを疑う。
同じ問題に直面した方の参考になれば幸いです。