Python--Matplotの第1歩

## Matplotlib
- グラフ描画ライブラリ
- [公式サイト](https://matplotlib.org/)
- 基本Python + Numpy + matplotlib + SciPy + etc.の組み合わせて使用


### インストール
```bash
pip install matplotlib
```

### 最初の例
```python
import matplotlib.pyplot as plt # 呪い

squares = [1, 4, 9, 16, 25]
plt.plot(squares) # defalutは点同士が直線で結びついている
plt.show() # 上の指示に従い、描画し、見せる
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646462/adb2c644-14b4-07db-e7b8-c5ce2d57bd27.png "実行結果")

### 日本語表示
デフォルトは日本語使用できないため、ちょっとした設定が必要になります。
要は、**matplotlib**のフォント設定を日本語対応のフォントを変更する。

1. https://ipafont.ipa.go.jp/node17#jp からIPAexフォントをダウンロード、現時点は「IPAexフォント Ver.004.01」が最新
2. ダウンロードしたファイルを解凍し、中の`ipaexg.ttf`ファイルを${オブジェクトパス}\venv\Lib\site-packages\matplotlib\mpl-data\fonts\ttfにコピーする
2. ${オブジェクトパス}\venv\Lib\site-packages\matplotlib\mpl-dataは以下にある**matplotlibrc**を開き
3. **font.family**で検索
4. `#font.family  : sans-serif`の下に`font.family  : IPAexGothic`を追記する
5. **matplotlib**のキャッシュの保存先の内容を全部削除する

下記のコードでフォントパスとキャッシュの保存先を調べることができる

```python
print(matplotlib.matplotlib_fname())   # フォントパス
print(matplotlib.get_cachedir())       # キャッシュの保存先
```

もう一つ方法は、設定ファイルを修正しないが、毎回下記のコードを追記しないといけない

```python
plt.rcParams['font.sans-serif']=['IPAexGothic']
```

もしくは

```python
plt.rcParams["font.family"] = "IPAexGothic"
```

### 飾り

```python
import matplotlib.pyplot as plt

squares = [1, 4, 9, 16, 25]
plt.plot(squares, linewidth = 5)  # 線をちょっと太くする

plt.title("平方", fontsize = 24)
plt.xlabel("値", fontsize = 14)
plt.ylabel("値の二乗", fontsize = 14)

# 軸の目盛りの表示設定
plt.tick_params(axis = 'both', labelsize = 14)
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646462/51941ee2-ba67-07a1-3f55-64657d4a6f92.png  "実行結果")

```python
import numpy as np
import matplotlib.pyplot as plt

# 0から5を0.2刻みの点を作成することにより、線が滑らかに見える
x = np.arange(0., 5., 0.2)
plt.plot(x, x * x)

plt.title("平方", fontsize = 24)
plt.xlabel("値", fontsize = 14)
plt.ylabel("値の二乗", fontsize = 14)

# 目盛りの文字サイズをちょっと大きめに設定
plt.tick_params(labelsize = 30)

plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646462/03861647-b33b-00bc-dc72-3fb5ddde90e5.png "実行結果")

目盛りのサイズが大きくすると、X軸やY軸のラベルがはみ出して、見えなくなるが、もちろん画面のサイズを調整して、見えるようにすればいいが、`plt.tight_layout()`を`plt.show()`前に入れれば、自動的に収める状態で表示してくれる。

```python
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0., 5., 0.2)
plt.plot(x, x * x)

plt.title("平方", fontsize = 24)
plt.xlabel("値", fontsize = 14)
plt.ylabel("値の二乗", fontsize = 14)

plt.tick_params(labelsize = 30)

plt.tight_layout()
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646462/d7c601b1-9bf0-b18d-2e30-cd827dd2852e.png)

### 点で表示したい(散布図)
scatter()を使用する。

```python
import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]
plt.scatter(x_values, y_values, s=100)  # sは点のサイズを指定

plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646462/afe4325f-9bf9-e56d-a62d-8620fb5e551b.png "実行結果")

データは自動計算から取得する

```python
import matplotlib.pyplot as plt

x_values = list(range(1, 1001))
y_values = [x**2 for x in x_values]
plt.scatter(x_values, y_values, s=4)

plt.axis([0, 1100, 0, 1100000])  # 軸の範囲
plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646462/c82e9b56-d711-1b2a-336e-afdadc6dfacb.png "実行結果")

### 色のカスタマイズ
パラメータ`c`で色を指定することができる

```python
plt.scatter(x_values, y_values, c='red', s=40)
```

RGBで指定することもできる。RGB それぞれのを色の要素を 0.0 ～ 1.0 のタプルで指定することも可能です。
```python
plt.scatter(x_values, y_values, c=(0, 0, 0.8), s=40)
```

### カラーマップ
カラーマップ (color map) は、描画する際に使用する値と色の対応関係を表す。データ可視化にあたり、カラーマップの選択は、データの変化のルールなどを強調することができる。例えば、浅い色で小さい値を表し、濃い色で多い値を強調するなど。

```python
import matplotlib.pyplot as plt

x_values = list(range(1, 1001))
y_values = [x**2 for x in x_values]
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues)

plt.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646462/d38beeb4-aca4-c829-c1c4-495f5817025f.png "実行結果")

詳しくは[オフィシャルサイト](http://matplotlib.org/)を参照する。Examples⇒Color

### グラフを保存
`plt.show()`の代わりに`plt.savefig()`を使用する

```python
plt.savefig(`squares_plot.png`, bbox_inches='tight')
```

`bbox_inches='tight'`を指定すると、余分の空白を切り落としてくれる。
保存できるファイルの拡張子は

```
eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff
```

### 軸を非表示

```python
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
```

### サイズ調整

```python
plt.figure(figsize=(10, 6))   # 単位はインチ
```

```python
plt.figure(dpi=128, figsize=(10, 6))   # デフォルトは80dpi
```