Matplotlib入門

#はじめに
今回、自分がMatplotlibでよくわからないところを少し明らかにしたいと思い、投稿します。

#matplotlibとは
matplotlibのライブラリの公式サイトから引用

https://matplotlib.org/

>Matplotlib: Visualization with Python
Matplotlib is a comprehensive library for creating static, animated, and interactive visualizations in Python. Matplotlib makes easy things easy and hard things possible.

>Create publication quality plots.
Make interactive figures that can zoom, pan, update.
Customize visual style and layout.
Export to many file formats .
Embed in JupyterLab and Graphical User Interfaces.
Use a rich array of third-party packages built on Matplotlib.

以上を訳すと、
matplotlib: Pythonによる視覚化
matplotlib は，Python で静的，アニメーション，およびインタラクティブな視覚化を作成するための包括的なライブラリです。Matplotlibは，簡単なことをより簡単にし，難しいことを可能にします。

出版物のような品質のプロットを作成します。
ズーム，パン，アップデートが可能なインタラクティブな図を作成します。
ビジュアルスタイルとレイアウトのカスタマイズ、多くのファイル形式へのエクスポートができます。JupyterLabやグラフィカルユーザーインターフェースへの組み込み、Matplotlibをベースにした豊富なサードパーティパッケージの利用もできます。

まとめると、Pythonを利用してグラフをプロットすることができるライブラリです。

#実行環境
Windows10
jupyter notebook

#matplotlibを使ってどんな図がかけるのか
Plot types
https://matplotlib.org/stable/plot_types/index.html
##1.基本的なグラフ
参考https://qiita.com/KntKnk0328/items/5ef40d9e77308dd0d0a4
Matplotlib: パッケージの全体
pyplot: matplotlibパッケージ内のモジュール。可視化するためのインターフェースであり、基本的にはこのモジュール越しにmatplotlibの機能を活用する。

```python
import matplotlib.pyplot as plt#matplotlibを使うためのおまじない、matplotlibを呼び出すときにpltを使う
import numpy as np#numpyを使うためのおまじない、numpyを呼び出すときにnpを用いる

# データを作る
#x軸について
x = np.linspace(0, 10, 100)
#y軸について
y = 4 + 2 * np.sin(x)

# グラフをプロットする
plt.plot(x,y)
#プロットを表示する
plt.show()
```
出力結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630267/25bb1b74-6487-54f3-1cfc-3931d3a2fc6b.png)


```python
import matpotlib.pyplot as plt
import numpy as np
```
まずはじめにライブラリをインポートして、matplotlibを使えるようにする。計算を効率よくするためのライブラリ、numpyも導入する。

```python
x = np.linspace(0, 10, 100)
y = 4 + 2 * np.sin(x)
```
グラフをx軸は0から100で100個の点を生成する。

xには以下のようなベクトルが格納されている。

[ 0.          0.1010101   0.2020202   0.3030303   0.4040404   0.50505051
  0.60606061  0.70707071  0.80808081  0.90909091  1.01010101  1.11111111
  1.21212121  1.31313131  1.41414141  1.51515152  1.61616162  1.71717172
  1.81818182  1.91919192  2.02020202  2.12121212  2.22222222  2.32323232
  2.42424242  2.52525253  2.62626263  2.72727273  2.82828283  2.92929293
  3.03030303  3.13131313  3.23232323  3.33333333  3.43434343  3.53535354
  3.63636364  3.73737374  3.83838384  3.93939394  4.04040404  4.14141414
  4.24242424  4.34343434  4.44444444  4.54545455  4.64646465  4.74747475
  4.84848485  4.94949495  5.05050505  5.15151515  5.25252525  5.35353535
  5.45454545  5.55555556  5.65656566  5.75757576  5.85858586  5.95959596
  6.06060606  6.16161616  6.26262626  6.36363636  6.46464646  6.56565657
  6.66666667  6.76767677  6.86868687  6.96969697  7.07070707  7.17171717
  7.27272727  7.37373737  7.47474747  7.57575758  7.67676768  7.77777778
  7.87878788  7.97979798  8.08080808  8.18181818  8.28282828  8.38383838
  8.48484848  8.58585859  8.68686869  8.78787879  8.88888889  8.98989899
  9.09090909  9.19191919  9.29292929  9.39393939  9.49494949  9.5959596
  9.6969697   9.7979798   9.8989899  10.        ]

このxについてyの関数に代入し、yの値を結果を出力する。

```python
plt.plot(x,y)
```
このグラフをxとyについて紐づけてプロットする。

```python
plt.show(x,y)
```
プロットしたグラフを表示する。

##2.散布図
```
import matplotlib.pyplot as plt#matplotlibを使うためのおまじない、matplotlibを呼び出すときにpltを使う
import numpy as np#numpyを使うためのおまじない、numpyを呼び出すときにnpを用いる

# データを作る
#x軸について
x = np.linspace(0, 10, 100)
#y軸について
y = 4 + 2 * np.sin(x)

# グラフをプロットする
plt.scatter(x,y)#散布図
#プロットを表示する
plt.show()
```
上記の基本的なグラフのplt.plot(x,y)を変えて、プロットしたグラフを表示する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630267/493ede74-858b-13fd-2a0d-bf2b194a3cd0.png)

##3.棒グラフ
```python
import matplotlib.pyplot as plt#matplotlibを使うためのおまじない、matplotlibを呼び出すときにpltを使う
import numpy as np#numpyを使うためのおまじない、numpyを呼び出すときにnpを用いる

# データを作る
#x軸について
x = np.linspace(0, 10, 10)
#y軸について
y = 4 + 2 * np.sin(x)

# グラフをプロットする
plt.bar(x,y)
#プロットを表示する
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630267/f82a4b34-5fe6-51f9-f16b-7c0191271934.png)

##4.ステムグラフ
```
import matplotlib.pyplot as plt#matplotlibを使うためのおまじない、matplotlibを呼び出すときにpltを使う
import numpy as np#numpyを使うためのおまじない、numpyを呼び出すときにnpを用いる

# データを作る
#x軸について
x = np.linspace(0, 10, 10)
#y軸について
y = 4 + 2 * np.sin(x)

# グラフをプロットする
plt.stem(x,y,use_line_collection= True)
#プロットを表示する
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630267/baec63c9-995b-df97-cfe8-df4f681bc94b.png)
あまり使わない、、、

##5.ステップグラフ
```
import matplotlib.pyplot as plt#matplotlibを使うためのおまじない、matplotlibを呼び出すときにpltを使う
import numpy as np#numpyを使うためのおまじない、numpyを呼び出すときにnpを用いる

# データを作る
#x軸について
x = np.linspace(0, 10, 10)
#y軸について
y = 4 + 2 * np.sin(x)

# グラフをプロットする
plt.step(x,y)
#プロットを表示する
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630267/01cccfe1-cf5e-70fc-c0aa-d7f3bb2a9391.png)
#フィルビトウェーン関数
```
import matplotlib.pyplot as plt#matplotlibを使うためのおまじない、matplotlibを呼び出すときにpltを使う
import numpy as np#numpyを使うためのおまじない、numpyを呼び出すときにnpを用いる

# データを作る
#x軸について
x = np.linspace(0, 10, 10)
#y軸について
y1 = 4 + 2 * np.sin(x)
y2 = 2 + 2 * np.sin(x)
# グラフをプロットする
plt.fill_between(x,y1,y2)
#プロットを表示する
plt.show()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630267/9b6e71a5-5bf9-77dc-32aa-8d832c2d7c45.png)

とりあえず、エクセルよりも自由度が高いことがわかる。pltで全て出力するやり方はMATLABを模倣しているらしい。


#参考文献
[1]【初心者向け】Matplotlib入門 | Pythonを使ってデータを可視化してみよう！
https://aiacademy.jp/media/?p=154
[2]matplotlibでのプロットの基本
https://qiita.com/KntKnk0328/items/5ef40d9e77308dd0d0a4
[3]早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話https://qiita.com/skotaro/items/08dc0b8c5704c94eafb9