Jupyterノートブックにおける %matplotlib inline
の解説

Jupyterノートブック(やGoogle Colabのようなツールを使ってPythonのデータ可視化に取り組んでいるとき)において、多くのノートブックの冒頭に奇妙な一行を見たことがあるかもしれません:%matplotlib inline
。最初はこれが何か魔法の呪文のように見えるかもしれません—実際、その役割はまさにその通りです! この初心者向けガイドでは、%matplotlib inline
が実際に何をしているのか、いつ使うべきか、具体的なコード例とともに、その使い方を解説します。また、最新のJupyter環境では本当に必要なのかも含めて説明します。この記事を読み終える頃には、この「魔法」のようなコマンドがなぜこれほどまでに一般的に使われているのか、そしてMatplotlibのグラフがどのようにインラインで(コードのすぐ下に)表示されるのかが理解できるでしょう。さあ、始めましょう!
%matplotlib inline
とは何か?
%matplotlib inline
は、IPythonやJupyterノートブックで使える特殊なマジックコマンドです。マジックコマンド(%
から始まる)は通常のPythonコードではなく、IPythonカーネルの動作を設定するためのコマンドです(IPython ドキュメント — マジックコマンドの概要 (opens in a new tab))。この場合、%matplotlib inline
はJupyterに対してMatplotlibの「インライン」バックエンドを使用するように指示します。これによりプロットはノートブックの出力領域に、生成したコードのすぐ下にダイレクトに表示されるようになります** (DataCampのチュートリアル (opens in a new tab)、Saturn Cloudブログ (opens in a new tab))。
平たく言えば、%matplotlib inline
という指示はJupyterに対し、「ねえ、Matplotlibでグラフを作ったら、それをここに直接表示してね」と命令しているのと同じです。通常(この設定をしない場合)、Matplotlibは新しいウィンドウやインタラクティブビューアを開いて表示したり、グラフオブジェクトの文字列表現だけを見せたりします(Saturn Cloudブログ (opens in a new tab))。%matplotlib inline
はこれを防ぎ、図の出力をノートブックページに埋め込む仕組みです。
では、「インライン!」と呼ばれるのはなぜか? 背後ではMatplotlibにはバックエンド(グラフの描画エンジンの種類)という概念があります(Mediumの解説 (opens in a new tab))。一部のバックエンドは外部ウィンドウ(GUIウィンドウ)を開いて表示しますが、他のバックエンド(例:インラインバックエンド)はJupyterのセル内に画像として描画します。%matplotlib inline
は、そのインラインバックエンドを選択するためのコマンドです。これにより、作業中のデータ解析や可視化においてデータとグラフを一箇所にまとめておきたい場合に非常に便利です。
ちなみに、冒頭の%
は「マジック」コマンドであることを示しています。これはJupyter固有のコマンドであり、標準のPython構文ではありません(IPython公式ドキュメント (opens in a new tab))。このため、普通のPythonスクリプトには書きませんし(シンタックスエラーになります)、JupyterやIPythonのセッション内だけで働きます。
いつ(そしてなぜ)%matplotlib inline
を使うのか?
%matplotlib inline
は、Jupyter NotebookやJupyterLabのようなインタラクティブな環境で、作成したグラフをすぐに**ノートブック内に表示させたいときに最も便利です。データ探索や、データサイエンス、チュートリアル用のノートブックでは、次のようなシーンで使われます。
- インタラクティブなデータ分析:データを可視化しながら探索しているときに、多数のチャートを作成します。
%matplotlib inline
を設定しておけば、グラフがコードのすぐ下に現れ、コードと結果を比較しやすくなります。画面を切り替える必要もなく、作業の流れが自然です(Saturn Cloudブログ (opens in a new tab))。 - 結果とグラフをまとめて保持:ノートブックを保存・エクスポートするときにも便利です。チャートは画像として埋め込まれ、他者がノートを閲覧しても追加ファイル不要です。
- 大量データ・複雑な可視化:複数のプロットを連続して作成、比較しながら分析できるため、流れの中で多くのグラフを積み重ねるのに役立ちます。
- 教育やチュートリアル:初心者向けの教材や解説では、
%matplotlib inline
を推奨し、すぐにグラフが見られる状態をつくることで混乱を防いでいます。
逆に、標準のPythonスクリプトやその他の非Jupyter環境(例:コマンドラインのPython)では、%matplotlib inline
は使いません。こういったときは、plt.show()
を呼び出してウィンドウにグラフを表示します。%matplotlib inline
はあくまでJupyterノートブック専用の魔法のコマンドです。
要点:%matplotlib inline
は、Matplotlibのチャートをコードのすぐ下に綺麗に表示したいときに使います。ほとんどの場合、Jupyterノートブックで作業しているときにはこれを使っています。
%matplotlib inline
の使い方例
使い方はとても簡単。ノートブックのセルの一番最初に書くだけです(多くはインポートの直後に置きます)。以下は典型的な例です。
# まず最初に書く
%matplotlib inline
import matplotlib.pyplot as plt
# グラフ作成例
plt.figure(figsize=(4,3))
plt.plot([1, 2, 3], [2, 4, 6], color="blue", marker="o")
plt.title("例のグラフ")
plt.xlabel("X軸の値")
plt.ylabel("Y軸の値")
plt.show()
この例のポイント:
%matplotlib inline
は、このセルの最初に記述して環境設定をします。これだけで、その後のセルのグラフ表示設定が変わるわけです。- **
import matplotlib.pyplot as plt
**は、一般的なインターフェースです。 plt.plot()
のようにコマンドを書き、plt.show()
を呼ばすことでグラフを描きます。- 「
plt.show()
は必須ではない(セルの最後に書いたときに自動表示される)ものの、明示的に書くのは良い習慣です。
%matplotlib inline
の必要性は今どうなっている?
最近のJupyter環境では、多くの場合、%matplotlib inline
を書かなくても自動的にインライン表示されることがわかっています。たとえば、import matplotlib.pyplot as plt
やpandasのデータ可視化だけで、すでにインラインバックエンドが有効になる仕組みです(Stack Overflowの質問 (opens in a new tab))。
実際、Jupyterの最新版では、%matplotlib inline
を省略してもグラフは正しくインライン表示されます。これは、内部的に自動的に設定されているためです。
ただし、「それでも%matplotlib inline
を書くべきか?」というと、次のような理由で推奨されるケースもあります。
- 明示的な宣言の意味:ノートブックの最初に書いておくことで、「このノートはグラフをインラインで表示させる設定です」という説明・明示になります。
- 環境の違いに対応:古いJupyterや、異なるバックエンド設定の環境では、これを書いておかないとグラフが見えないこともあります。
- 一貫性や「ドキュメントとしての意図」:何のためにこの設定をしているかを明るくするために、書いておくのが慣例です。
まとめ
%matplotlib inline
は、Jupyterのセル内でMatplotlibのグラフを「セルの下に埋め込みしっかり表示」するための魔法のコマンドです。- もともとは必須の設定でしたが、最新のJupyter環境では自動的にインライン表示となるため、必須ではなくなっています。
- それでも、明示的に書いておくと、環境に左右されず確実にグラフが表示されるため便利です。
- 実際には、ノートブックの冒頭で一度だけ書くのが一般的です。
どちらにせよ:%matplotlib inline
は、あなたのMatplotlibグラフをノートブック内に美しく見せるための「魔法の一行」なのです。もし見つけたら、「これはグラフをインラインに見せるための設定なんだな」と理解しておきましょう。
参考資料
- Saturn Cloudブログ – Jupyter NotebookにおけるMatplotlibのインライン表示
- DataCamp – Matplotlibのインライン表示を探索する
- Medium –
%matplotlib inline
の仕組みと必要性について - Stack Overflow –
%matplotlib inline
は今も必要か? - IPython公式ドキュメント – マジックコマンドの解説