例題演習matplotlib(1) 最初の一歩

# 例題演習matplotlibでの目的
Pythonでグラフを作成するライブラリのmatplotlib．
簡単なグラフを作成することは楽だが，少し凝ったグラフを作ろうとすると難しい．
マニュアルも分かりにくいし，検索してもさらにドツボにはまる可能性も高い．

この演習の目的は，ベースとなるコードをもとに改変し，見栄えの良いグラフを図化できるようにすることである．

ベースとなるコードは，matplotlibの細部の調整ができるように主要なパラメータを示しておく．
そのため，非常に長ったらしいコードとなっているが，グラフの調整に時間をかけるよりはマシだと思う．
習うより慣れろの精神で実施してもらいたい．

## 環境
+ OS: Lubuntu 21.04
+ Python: python 3.9.4
+ matplotlib: 3.4.1


# 準備（インストール）
以下はUbuntuでのmatplotlibなどのインストールの例を示す．

```shell
$ sudo apt install python3-pip
$ pip install numpy matplotlib pandas
```

日本語フォントとして，IPAフォントを使用するため，下記でインストールしておく．

```shell
$ sudo apt install fonts-ipafont fonts-ipaexfont
```


# 例題(1)：最も簡単な例
Hello World的な例題を以下に示す．

```python:plot01.py
import numpy as np
import matplotlib.pyplot as plt

# setting
f_out = 'graph01.png'            # output file (figure)

# data
x = np.arange(0, 5, 0.1)            # data x
y = np.exp(-x) * np.cos(2*np.pi*x)  # data y

# matplotlib
fig = plt.figure()              # (A) Figure object
ax = fig.add_subplot()          # (B) Axes object
ax.plot(x, y)                   # (C) plot data
plt.savefig(f_out)              # (E) save figure
plt.close()                     # (F) close
```

これを実行すると，下のようなグラフがgraph01.pngとして出力される．
![graph01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195213/e214ae00-ada9-38c6-03d3-67ffc8553f0a.png)

# 解説
## matplotlibのimport
```python
import matplotlib.pyplot as plt
```

まず，matplotlibライブラリのpyplotをimportする．
matplotlib.pyplotは，matplotlibの操作を担当するクラスである．
一般的に，pltという別名を使用する．


## 概要
この例題では，各行に説明用として(A)～(F)の記号を付けている（あえてDは飛ばしている）．
matplotlibはオブジェクト指向のライブラリである．ここでは，その概略を理解しよう．

```python
fig = plt.figure()              # (A) Figure object
ax = fig.add_subplot()          # (B) Axes object
ax.plot(x, y)                   # (C) plot data
plt.savefig(f_out)              # (E) save figure
plt.close()                     # (F) close
```

(A)では，Figureオブジェクトを作成している．
Figureオブジェクトは，図全体のオブジェクトとなる．

(B)では，Figure（図面）にAxesオブジェクトを追加している．なお，axesは，axis（軸）の複数形．
Axesオブジェクトは，Figureオブジェクトの一部であり，グラフの枠部分に相当する．

(C)では，Axesオブジェクトにデータをプロットしている．

(E)で，pngファイルとして出力している．

(F)は作成したFigureオブジェクトをcloseし，メモリを解放する．なくても問題はない．

何がどうなっているのかを知るには，それぞれを削除してみれば分かる．

### (A) Figureのみ
以下のように，(B),(C)をコメントアウトしてみよう．

```python
fig = plt.figure()              # (A) Figure object
# ax = fig.add_subplot()          # (B) Axes object
# ax.plot(x, y)                   # (C) plot data
plt.savefig(f_out)              # (E) save figure
plt.close()                     # (F) close
```

すると，下のような全部白い図となる．要するに，Figureという入れ物はあるが，中に何もないということだ．
![graph01_A.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195213/bb6ac226-e76a-e98a-0fbf-110b8237048c.png)

### (B) Axesまで

次に，(C)のみをコメントアウトしてみよう．

```python
fig = plt.figure()              # (A) Figure object
ax = fig.add_subplot()          # (B) Axes object
# ax.plot(x, y)                   # (C) plot data
plt.savefig(f_out)              # (E) save figure
plt.close()                     # (F) close
```

この場合は，下の図のように，X軸とY軸がついた枠が作成されたものとなる．
この枠の部分がAxesオブジェクトということだ．
ちなみに，何もデータがない状態では，X軸とY軸は0～1の範囲に自動設定されている．
![graph01_AB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/195213/abc076a5-6b0f-47bb-dfc6-d51360e10956.png)


(C)のplotまで実行すれば，最初の図になり，データが折れ線グラフとなって追加されていることがわかる（この場合，範囲は自動で設定される）．
Figureが図面全体で，AxesがFigureの中のグラフ部分という関係が分かるだろう．
そして，折れ線は，Axesオブジェクトに対してplotする，という構造になっている．


# 演習(1)
上記の例題(1)を実行し，グラフが作成されることを確認せよ．

# 次の記事
例題演習matplotlib(2)：単純な折れ線グラフ
https://qiita.com/s4s/items/11db1cdb4c604e1dd42a