【Python】matplotlibのpltとaxの書き方の違いについて

背景

  • pythonの可視化に使用されるライブラリとしてmatplotlibには、書き方がややこしく理解が難しい。
  • 理解を難しくさせる要因として、そもそもmatplotlibの書き方の流儀的に2つの方法(pltとax)があることが挙げられる。
  • matplotlibの可視化をサクッとできるようになるために自分なりに調べた知見をまとめておく。

目標

  • matplotlibの2つの書き方について理解する。

matplotlibに存在する2つの書き方

  • 上記で述べたように、matplotlibには主に2つの書き方があるらしい。

  • 公式でどのように呼ばれているかはわからないが、いくつかのサイトを調べたところ主に、「plt」を使用する書き方は、MATLABの書き方に似ているらしいのでMATLABスタイル、「ax」を使用する書き方は、オブジェクト指向の書き方なので、オブジェクト思考スタイルなどと呼ばれていた。

  • matplotlibの2つの書き方

  1. MATLABスタイル(pltを使用する方法)
  2. オブジェクト指向スタイル(axを使用する方法)

両方の描画スタイルを比べてみる

  • $y = x^2$の簡単なグラフを描画するプログラムで両方の描画スタイルを比較してみる。
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3,3)
y = x**2
fig = plt.figure() 
plt.plot(x,y)

plt.show()
fig = plt.figure()
ax = fig.add_subplot()

ax.plot(x,y)

plt.show()

【プログラム引用】Matplotlib plt.figure()を使う理由|FigureとAxesの関係を把握しよう

※出力はどちらも以下のようになる。

01_0042_y.png

  • 上記の通り、簡単な描画では、1. MATLABスタイルの方が、コード量が少なくて済む。

どちらの描画スタイルを使うべきか?

  • 結論
    筆者は2. オブジェクト指向スタイル(axを使用する方法)を使っていった方が良いと考えている。
  • 理由
    このサイトの方が述べられているようにオブジェクト指向で書いていった方が、微調整がしやすいから。

補足

どちらの描画スタイルを使うべきかは、上記の通りであるが、少し調べた感覚も書いておきたい。一応MATLABスタイルにもメリットはあり、単純な描画の場合だとMATLABスタイルの方が、コード量が少なくて良い場合もあるし、何より、オブジェクト指向スタイルより直感的だと思う。実際に筆者も無意識にMATLABスタイルを多用して可視化を行っていた。また、MATLABスタイルの方が、簡単なためか、初学者向けの解説記事や書籍でのサンプルコードも多いように感じる。ただ、機械学習や複数のグラフを描画する際にはオブジェクト指向で書かないと実現できないことが多そうだと思った。個人的に、できるだけ設定値が細かく設定できる書き方の方が好きだというのもあると思う。

参考資料

matplotlib の2つの流儀( MATLAB・オブジェクト指向スタイル) | BOUL
matplotlib には、MATLAB スタイル と オブジェクト指向スタイル の2つの流儀が存在します。matplotlib でグラフを作成することが難しく感じるのは、この2つの描画スタイルの存在を知らないままグラフを作成している可能性が非常に高いです。

matplotlibのめっちゃまとめ - Qiita
0. はじめにやりたいことがあるたびにいちいちGoogleや公式サイトで検索してそれっぽいのを探すのはもう面倒だ。やっとそれっぽいのを見つけたのに、一行で済むようなことを「plt.なんちゃら」だ…
早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話 - Qiita
English version available on dev.toはじめにmatplotlibで作ったグラフの細かい調整は大変です。何をどういじったらいいのかを調べるのにアホみたいに時間がか…
pythonのmatplotlibの使い方をまとめてみた - Qiita
はじめに今回はmatplotlibの使い方をまとめていきます。matplotlibについては多くの人が使い方をまとめているので、特に目新しいことはないかもしれませんがお付き合い頂ければ幸いです。前回の記事でnumpyとpandasの使い方についてまとめているので、よろしければご確認ください…

Qiita記事

【Python】matplotlibのpltとaxの書き方の違いについて - Qiita
背景pythonの可視化に使用されるライブラリとしてmatplotlibには、書き方がややこしく理解が難しい。理解を難しくさせる要因として、そもそもmatplotlibの書き方の流儀的に2つの方…