Jupyter Notebookでmatplotlib
を使用する場合には、インポートする前に
%matplotlib inline
と記述しますよね?では…
- なぜ
inline
と入力しているのでしょうか? - 入力し忘れても動くことがあるのはなぜでしょうか?
%matplotlib notebook
というコマンドもあるのをご存じでしょうか?
この記事では、matplotlib inline
の謎について解説していきたいと思います!
- Jupyte Notebookのmatplotlibの読み込み|%matplotlib inline
- %matplotlib inlineを指定したときの挙動
- グラフがアウトプット行に出力される
- plt.show()を省略してもグラフが出力される
- plt.show()でアウトプット行に2つのグラフ表示
- バックエンドとは?
- バックエンドの確認方法
Jupyte Notebookのmatplotlibの読み込み|%matplotlib inline
Jupyter Notebookでmatplotlib
を使用する場合、次のように読み込むことが多いと思います。
%matplotlib inline
import matplotlib.pyplot as plt
%matplotlib inline
を指定してから、matplotlib.pyplot
をインポートしています。
(pyplot
モジュールについて詳しく知りたい方は、まず次の記事をご覧ください)
このとき%matplotlib inline
には、どんな意味があるのでしょうか?
今回は、%matplotlib inline
の謎について解説していきます。
%matplotlib inlineを指定したときの挙動
%matplotlib inline
を指定したときの挙動:
- グラフがアウトプット行に出力される
plt.show()
を省略してもグラフが出力されるplt.show()
でアウトプット行に2つ以上のグラフ表示可能
グラフがアウトプット行に出力される
%matplotlib inline
を実行してプロットを作成すると、アウトプット行に図が出力されます。
アウトプット行内(in line)にグラフが出力されるので、まさにinline
です。
Jupyter Notebookでは、アウトプットを確認しながらスクリプトを書くことが多いので、
- いちいちポップアップが出ない
- アウトプット行にグラフを表示できる
というのはとても便利です。
plt.show()を省略してもグラフが出力される
対話側実行環境やエディタでは、グラフの表示のためにplt.show()
を実行する必要があります。
一方、%matplotlib inline
を使用したnotebook環境ではplt.show()
を省略してもグラフが出力されます。
plt.show()
の書き忘れはよくあるので、とても便利な機能だと思います。
一点注意したいのが、plt.show()
を省略するとアウトプット行にオブジェクトの場所が出力されます。
もし、これを表示させたくない場合はplt.show()を
省略せずに記述しましょう
plt.show()でアウトプット行に2つのグラフ表示
インプット行にplt.show()
が記述されていると、その段階でグラフが出力されます。
これを利用すると、スクリプトをplt.show()
で区切ることで2つ以上のグラフを1つのアウトプット行に表示できます。
x = np.linspace(0, 2*np.pi)
# 1つ目のグラフを描く
plt.plot(x, np.sin(x))
plt.show() # ここで1つ目のグラフ出力
# 2つ目のグラフを描く
plt.plot(x, np.cos(x))
plt.show() # ここで2つ目のグラフ出力
クイックに結果を確認する場合には手軽で良い方法だと思います。
とはいっても、これはあくまで異なる2つの図を出力しているだけです。
2つ以上のグラフを作成して、配置やタイトルなども調整したい場合はsubplot
を使用しましょう。
%matplotlib inlineの意味はバックエンドの指定
%matplotlib inline
はmatplotlib
のバックエンドをinline
に設定するという意味です。
matplotlib
のバックエンドとは何でしょうか?
バックエンドとは?
バックエンドとは、グラフを出力するためのmatplotlib
の内部処理です。
通常、ユーザーはフロントエンドと呼ばれるスクリプト部分を記述しています。
- フロントエンド:ユーザーが記述するスクリプト
- バックエンド:
matplotlib
内の処理、グラフの出力形式に応じて処理する
matplotlib
ではバックエンドの種類を変更することによって、グラフの出力形式を
- inlineモードで出力
- pngファイルで出力・保存
- インタラクティブモードで出力(出力した図を操作して拡大などができる)
などに変更することができます。
他にもたくさんのバックエンドが存在します。
%matplotlib inline
は、バックエンドをアウトプット行出力用に設定するという意味です。
バックエンドの確認方法
バックエンドを確認したい場合には
matplotlib.get_backend()
を実行します。
%matplotlib inline
import matplotlib
matplotlib.get_backend()
# 'module://ipykernel.pylab.backend_inline'
たしかにinline
になっているようですね。
%matplotlib inlineは必要ない?
%matplotlib inline
を入力し忘れても、アウトプット行にグラフが表示された経験がある方もいるかと思います。
なぜでしょうか?
実は、notebook使用時のデフォルトのバックエンドはinline
になっているという情報があります。
そのため、比較的新しいバージョンのmatplotlib
を使用していれば、%matplotlib inline
は必要がないようです。
ただ、具体的な情報ソースが見つからないので、とりあえずinline
は書いておいた方が良さそうです。
%matplotlib notebook|インタラクティブモード
このバックエンドでは、図をインタラクティブモードで出力します。
インタラクティブモードには:
- 図の領域の大きさ変更
- 図の平行移動、拡大・縮小
- アニメーション出力時に使用
することができるという特徴があります。
インタラクティブモードの出力例を紹介します。
%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2*np.pi)
y = np.sin(x)
plt.plot(x, y)
plt.show()
次のようなインタラクティブモードでグラフが出力されます。
各ボタンは次のような機能を持っています。
インタラクティブモードは便利な反面デメリットがあります。
- 終了ボタンを押さないと別のセルのグラフまで同じグラフに出力されてしまう
という点です。
複数のインプット行でグラフを出力する場合、いちいち終了ボタンを手で押す必要があるので不便ですね。
複数のインプット行でグラフを出力する場合はinline
の方が便利です。
おわりに:matplotlib関連記事の紹介
今回は、matplotlib
インポート時に指定する%matplotlib inline
の謎について解説しました。
matplotlib
は奥の深いモジュールですが、基本的なプロットはpyplot
で作成できます。
次に読んで頂きたい記事はこちらです。pyplot
の基本を速攻マスターできます。
他にもmatplotlib
の記事を書いていますのでぜひご参考に!
- matplotlib | subplot使い方まとめ:1つの図の中に複数のグラフを並べる方法
- matplotlib | pyplotで基本的なグラフを簡単に作れるようになるには?
- matplotlib | 一つのグラフに複数プロット
- matplotlib | pyplot.text()よく使うもの徹底解説!
Twitter@YutaKaでは、ほぼ毎日pythonに関する情報を発信しています。
気楽にツイートしているので、気軽にフォローしてください!