0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-09-24

背景

  • 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
1. MATLABスタイル(pltを使用する方法)
fig = plt.figure() 
plt.plot(x,y)

plt.show()
2. オブジェクト指向スタイル(axを使用する方法)
fig = plt.figure()
ax = fig.add_subplot()

ax.plot(x,y)

plt.show()

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

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

y^2.png

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

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

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

補足

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

参考資料

個人ブログ

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?