🤔

なぜ、Matplotlib については .pyplot をインポートするのか

2022/11/20に公開

はじめに

Pythonでの機械学習実装を学び始めています
まずは必要となるライブラリのインポートについて。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

それぞれのライブラリの役割について、概ねこのように学びました

  • Numpy:数値の計算を行うライブラリ
  • Pandas: データの操作を行うライブラリ
  • Matplotlib: データの可視化を行うライブラリ

一方で、なぜ、numpyとpandasはそのままインポートしているのに Matplotlibは.pyplotをインポートしているのか疑問に思い、少々調べてみました

なぜmatplotlib.pyplot しているか

まず前提としてimportについてドキュメントを読みます。
https://docs.python.org/ja/3/reference/import.html

ある 1 つの module にある Python コードから他のモジュールを インポート することで、そこにあるコードへアクセスできるようになります

この名前はインポート検索の様々なフェーズで使われ、これは例えば foo.bar.baz のようなドットで区切られたサブモジュールへのパスだったりします。この場合、 Python は最初に foo を、次に foo.bar 、そして最後に foo.bar.baz をインポートしようとします。中間のいずれかのインポートに失敗した場合は、 ModuleNotFoundError が送出されます。

以上より、冒頭のimport文は、matplotlib のサブモジュールである pyplot をインポートしている
ということになります。

実際には、matplotlibのみのインポートもできるはず。(実際下記もできました)

import matplotlib as mpl

ただこの後 pyplotのメソッドを使おうとすると
mpl.pyplot
という形での呼び出しが必要となります。

「matplotlib」直下のメソッドを直接使うことよりそのサブモジュールである「pyplot」内のメソッドを使うことのほうが多いためにまずはmatplotlib.pyplot の importから教えているのかなという印象です

matplotlibのドキュメントを読む

続いてそれぞれの定義・役割を理解するため、matplotlibのドキュメントを読みます。
冒頭から下記のような記載がありました
https://matplotlib.org/stable/api/matplotlib_configuration_api.html

An object-oriented plotting library.
A procedural interface is provided by the companion pyplot module, which may be imported directly, e.g.:
import matplotlib.pyplot as plt

なんと公式ドキュメントすら冒頭から pyplotのimportとなっていました。
内容としては、インターフェースは、手引きとなる pyplot モジュールによって提供される、みたいな意味合いかなと読みました。
pyplot自体をみてみましょう。

https://matplotlib.org/stable/api/pyplot_summary.html

matplotlib.pyplot is a state-based interface to matplotlib. It provides an implicit, MATLAB-like, way of plotting. It also opens figures on your screen, and acts as the figure GUI manager.
pyplot is mainly intended for interactive plots and simple cases of programmatic plot generation:

「state-based」のニュアンスははっきり分かりませんが、
少なくともプロットを行うための手段を提供する、matplotlibの主なインターフェイス、とのこと。

「MATLAB-like」についてはこちら。
https://ja.wikipedia.org/wiki/MATLAB

MATLAB(マットラブまたはマトラボ)は、アメリカ合衆国のMathWorks社が開発している数値解析ソフトウェアであり、その中で使うプログラミング言語の名称でもある。MATLABは、数値線形代数、関数とデータの可視化、アルゴリズム開発、グラフィカルインターフェイスや、他言語(C言語/C++/Java/Python)とのインターフェイスの機能を有している。

matplotlib はpythonのライブラリですがそのベースとなっているのはまた別のMATLABという言語のようでした。

matplotlib内には、pyplot以外にもたくさんのサブモジュールがありますが、
pyplotは学習の中でも登場した plt.plot()、plt.subplots()、plt.figure() 等グラフ描画に欠かせないものをはじめとして、メソッドが100以上はあるようでした。
他のサブモジュールよりだいぶ多い。

上記より、matplotlib、の中でも pyplotは、データの可視化、グラフ描画を行うためのインターフェースを提供する特に重要なモジュールである、ということかと思います。

pyplot以外の matplotlibのサブモジュールの使い道

ではpyplot以外のサブモジュール以外は使わないのか?というと、いくつか先々使いそうなものはありそうです。

mpl.rcParams

matplotlibのデフォルト設定が格納がされているそうです。
学習の中でもサイズや色等の設定をメソッドの引数に与えて表現していましたが、
共通的な設定を参照、変更したい場合には、rcParamsを使う、というイメージなようです。

mpl.use('')

サーバ処理と絡めてグラフ描画やそのファイル保存等の処理を行う場合に必要になってきそうです。

まずはpyplot配下のメソッドを駆使して描画を行えるようにすることが先決ですが、その他のモジュールについても場面に応じて使いこなせるようになっていきたいと思います。

今回はここまで。

Discussion