matplotlibに関する備忘録

今回は株価のグラフを表示する際に、得た知識について備忘録を残しておきたいと思います。

# 開発環境
MacOS
Python3.7(anaconda)
VSCode

[Matplotlibの使い方④（plt.subplots、plt.title、plt.legend）｜Pythonによる可視化入門 #4](https://lib-arts.hatenablog.com/entry/Python_visualize4)
[matplotlibの描画の基本 - figやらaxesやらがよくわからなくなった人向け](https://qiita.com/kenichiro_nishioka/items/8e307e164a4e0a279734)
[GridSpec](https://ebcrpa.jamstec.go.jp/~yyousuke/matplotlib/gridspec.html)
[Matplotlib でプロットの更新を自動化する方法](https://www.delftstack.com/ja/howto/matplotlib/how-to-automate-plot-updates-in-matplotlib/)

# matplotlibでわからなかったところ
まず、最初に`matplotlib.pyplot`を使用する際にわからなかった部分について書いていきます。

* グラフを描画する方法が多すぎてわからない
* `ax.plot`や`plt.plot`があるけどどっちが何なのかわからない

と、まあこんな疑問がありました。

まあ、どの方法でもグラフを表示すること自体はできそうですが、細かい設定をするってなった場合に、やり方が分かれてくるんだと思います。

# axやfigはなんなのか
`fig`とはグラフを書くための用紙のようなものですね。みんな一枚の紙にグラフとかを書いていくと思いますが、その紙がこの`fig`になります。

`axes`はグラフの`x線とy線`で囲まれた１つの四角になります。

## ax.plot(x, y)について
株価グラフを表示したいなと思いまして、`y(株価データ)`の値を取得することはできたのですが、`x(時間)`の値はどうすれば良いのかわかりませんでした。

ただ、`ax.plot(株価のデータ)`を入れても実行できました。
正直なんで実行できたのかはわからないのですが、取得したデータが、`時間データ`も付随して取得されたおかげで、実行することができたのかなと思います。

# その他の備忘録
#### figsize
`figsize`はデフォルトは`(6.4, 4.8)`になっておりまして、単位はインチになっております。単位をインチからピクセルに変更するには、`100倍`すればできます。

#### plt.subplot
`plt.subplot`は、`行数、列数、順番`を指定します。
:)10×10の100個の5番目 -> RCP=10105 

# 複数グラフの表示面積の割合を変えたい時
## gridspecが便利
複数のグラフを表示したいと思った時に、それぞれのグラフの表示している面積の割合を違う状態にしたいと思いました。

```python
from matplotlib import gridspec
gs = gridspec.GridSpec(縦の分割数, 横の分割数, height_ratios=(上, 下), width_ratios=(左, 右))
ax = [plt.subplot(gs[0, 0]), plt.subplot(gs[0, 1]), ...]
```
このような書き方になります。
ちなみに、上下の2つに分割する場合は、`ax=[plt.subplot(gs[0,0])]`の次は`ax=[plt.subplot(gs[1,0])]`になります。

次に少し、上の書き方とは違いますが、`fig`と`ax`を利用して、記述する例を示しておきます。

```python
fig = plt.Figure()
gs = gridspec.GridSpec(2, 1, height_ratios=(4, 1))
ax[0] = fig.add_subplot(gs[0])
ax[1] = fig.add_subplot(gs[1])
```
このようにして、複数のグラフ領域を区切っていく流れになります。


## gridspec_kwも使える
便利な道具は、あと2つくらいあるのですが、今回は`gridspec_kw`を紹介したいと思います。

気になる方は下に参考記事を載せておきますので、見てください。
[Matplotlib で異なるサブプロットサイズを作成する方法](https://www.delftstack.com/ja/howto/matplotlib/how-to-make-different-subplot-sizes-in-matplotlib/)



```python
fig, ax = plt.subplots(2, 1, 
                         gridspec_kw={
                                      'height_ratios':[4,1]
                                        })


```
このような感じで、`gridspec_kw`に**height_ratios**で高さの比率、**width_ratios**で左右の比率を調整することができます。

# グラフを更新する方法
例えば、`10枚のグラフ`を1枚ずつ表示したいとなった場合、10回更新する必要があります。

```python
ax.clear()
```
これを使えば、前に表示させたグラフを消去することができます。

さらに、**ax.axis('off')**を使うことで、軸などを消去することもできます。

## 2枚のグラフを表示して、更新したい場合
例えば、全部で20枚のグラフがあって、2枚ずつ表示したいとなった場合、こちらも10回更新する必要があります。
この場合の、グラフの更新方法を記述しておきます。

```python
fig, ax = plt.subplots(2, 1, 
                         gridspec_kw={
                                      'height_ratios':[4,1]
                                        })
ax[0].clear()
ax[1].clear()
```
このように、`ax[0]`と`ax[1]`が存在しますので、２つともを消去する必要があります。

# fig.canvas.draw()とfig.canvas.flush_events()
こちらの2つの処理文は、グラフを再描画するための機能になります。

```python
fig.canvas.draw()
fig.canvas.flush_events()
time.sleep(0.1) # 0.1秒だけ開ける
```
こちらの文を記述することで、`fig`全体でグラフを更新するという処理になります。


# まとめ
今回は、`matplotlib`の個人的によくわからない部分を記述していきました。
`matplotlib`の記事は自分より詳しい方が投稿してくださっているので、そちらで勉強すると理解が早いかと思います。