YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

matplotlib inline の謎解明! |「書けと言われたので書いています」から卒業

Jupyter Notebookでmatplotlibを使用する場合には、インポートする前に

  • %matplotlib inline

と記述しますよね?では…

  • なぜinlineと入力しているのでしょうか?
  • 入力し忘れても動くことがあるのはなぜでしょうか?
  • %matplotlib notebookというコマンドもあるのをご存じでしょうか?

この記事では、matplotlib inlineの謎について解説していきたいと思います!

Jupyte Notebookのmatplotlibの読み込み|%matplotlib inline

Jupyter Notebookでmatplotlibを使用する場合、次のように読み込むことが多いと思います。

%matplotlib inline
import matplotlib.pyplot as plt

%matplotlib inlineを指定してから、matplotlib.pyplotをインポートしています。

pyplotモジュールについて詳しく知りたい方は、まず次の記事をご覧ください。

≫Matplotlib plt.plot徹底解説 | 基本操作を総まとめ!
Matplotlibのplt.plotを使用したグラフを作成、グラフの見た目変更、タイトルや軸の設定など基本事項について徹底解説!!この記事を読めば、plt.plotで手軽に手早く簡単に、キレイなグラフ作成可能に!?
www.yutaka-note.com/entry/matplotlib_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()を省略するとアウトプット行にLine2Dオブジェクトの場所が出力されます。

これはplt.plot()Line2Dオブジェクトを返すため、それが表示されているだけです。

Notebookは実行結果をアウトプット行に表示しますよね。Notebookが、Line2Dオブジェクトが実行結果なのかな?と思って表示してくれています。

もし、これを表示させたくない場合は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つ以上のグラフを作成して、配置やタイトルなども調整したい場合はplt.subplotを使用しましょう。

≫Matplotlib subplotの使い方徹底図解!|一つの図に複数グラフを描く
Matplotlibで一つの図の中に複数のグラフを並べるにはどうすればいいの?subplotでグラフを並べられるらしいけど、使い方がよくわからない!という方のために、「plt.subplot()の基本的な使い方」を画像付きで解説していきます!plt.subplot()でプロットをキレイに配置して、見やすく人に伝わるグラフを目指しましょう!
www.yutaka-note.com/entry/2020/01/02/232925
 

オブジェクト志向でグラフを描画する場合には、plt.subplots()を使用する方が良いです。

≫Matplotlib plt.subplots()の使い方|FigureとAxesを同時生成!
Matplotlibでグラフを描くとき「fig, ax = plt.subplots()って、よく見るけど何してるの?」「plt.subplots()の便利な使い方を知りたい! 」という方のために、plt.subplots()でFigureとAxesを作ると何が便利なのか、plt.subplots()の基本的な使い方、覚えておくと便利なplt.subplots()の引数をを図解付きで解説します!
www.yutaka-note.com/entry/matplotlib_subplots
 

%matplotlib inlineの意味はバックエンドの指定

%matplotlib inlinematplotlibのバックエンドを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 アニメーション作成入門編 |ArtistAnimation徹底解説!
Matplotlibではアニメーションも作成できますが、初めての人には少し複雑です…。「 Matplotlibでアニメーションを描きたいけど、何から始めればいいの?」という方のために、 Matplotlibでアニメーションを超簡単に作成・保存する方法、アニメーション作成用の超基本テンプレを画像・サンプルコード付きで紹介していきます!
www.yutaka-note.com/entry/matplotlib_artist_anim
 

オススメ|matplotlibとデータ分析の勉強方法

今回は、matplotlibインポート時に指定する%matplotlib inlineの謎について解説しました。

matplotlibは奥の深いモジュールですが、なかなかわかりにくい部分もあります…。

そこで、グラフの作成方法、種類変更、凡例、タイトルの設定など網羅的にわかりやすく整理した記事を作りました。ぜひ参考にしてみてください。

≫【初心者向け】Matplotlibの特徴と使い方をわかりやすく解説!
脱初心者のためのMatplotlibマスターガイドです。そもそもどういう流れでプロットするのか?どんな種類のグラフが描けるのか?日本語設定は?タイトルや軸の設定は?オブジェクト指向って何?そんな疑問を解決します!この記事で、脱Matplotlib初心者を目指そう!
www.yutaka-note.com/entry/matplotlib_guid
 

また、データ分析初心者の方にはこちらの記事もおススメです。

私がこれまで勉強してきた経験をもとに考えたおススメの勉強本の紹介記事です。

何から始めて、どうやってレベルアップしていけばいいのか、初心者の方にぜひおススメしたい本を紹介しました。

≫独学でデータ分析を勉強するオススメ学習本
独学でのpythonデータ分析勉強に役立ったおススメ書籍を紹介していきます。業務でそれなりにデータ分析を行えるまで、いろいろな試行錯誤をしてきましたが、もし自分が今ゼロから勉強する立場ならどうするのがいいのか考えてみました。以下では、入門書、個別モジュール用、実践用の3つの視点でおススメ本を紹介していきます。
www.yutaka-note.com/entry/data_analysis