【matplotlib.pyplot】レイアウトを整えるためのチートシート

jupyterなどでmatplotlibで書いたグラフを発表などで使う際に、レイアウトがひちゃかちゃで悲しくなることはありませんか？
そんな時に参考にしたくなるようなチートシートを作ってみました。


[公式ドキュメンテーションはこちら](https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.html#module-matplotlib.pyplot)

# 1.プロットする

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

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y); 
```

最後の行のセミコロンはjupyterでの不要な出力を省略するために書いています。

出力はこんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541751/6d84c42f-8f45-bb20-b44d-8a0edfa61779.png)



# 2.図のタイトル・軸のタイトルを設定する

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

x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.title("y=sin(x)", fontsize=20)
plt.xlabel("x-axis", fontsize=18)
plt.ylabel("y-axis", fontsize=18)

plt.plot(x, y);
```
出力はこんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541751/c5fed915-89da-a430-d8d2-3bd052001fed.png)

# 3.目盛り・グリッドを設定する


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

x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.title("y=sin(x)", fontsize=20)
plt.xlabel("x-axis", fontsize=18)
plt.ylabel("y-axis", fontsize=18)
plt.xticks(rotation=-10, fontsize =15)
plt.yticks([-1, -0.5, 0, 0.5, 1], fontsize =15)
plt.minorticks_on() #補助目盛りをつける
plt.grid(which='major') #主目盛りに対してグリッドを書く

plt.plot(x, y);
```
出力はこんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541751/cbf1e224-bfa0-c64d-8972-3edb015202ba.png)

もし目盛りが邪魔な場合は、

```python
plt.xticks([])
```
などを挟めば目盛りを消すことも可能です。


# 4.座標軸・軸の範囲を設定する



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

x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.title("y=sin(x)", fontsize=20)
plt.xlabel("x-axis", fontsize=18)
plt.ylabel("y-axis", fontsize=18)
plt.xticks(rotation=-10, fontsize =15)
plt.yticks([-1, -0.5, 0, 0.5, 1], fontsize =15)
plt.xlim(-1/2, np.pi * 3)
plt.ylim(-1.5, 1.5)
plt.hlines(0, -1, 10) 
plt.vlines(0, -2, 2)
plt.minorticks_on() #補助目盛りをつける
plt.grid(which='major') #主目盛りに対してグリッドを書く

plt.plot(x, y);
```
出力はこんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541751/47e3c412-1010-2552-4ce4-7a92902c27f5.png)


# 5.グラフを重ねる / マーカー・凡例を設定する


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

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.title("Trigonometric function", fontsize=20)
plt.xlabel("x-axis", fontsize=18)
plt.ylabel("y-axis", fontsize=18)
plt.xticks(rotation=-10, fontsize =15)
plt.yticks([-1, -0.5, 0, 0.5, 1], fontsize =15)
plt.xlim(-1/2, np.pi * 3)
plt.ylim(-1.5, 1.5)
plt.hlines(0, -1, 10) 
plt.vlines(0, -2, 2)
plt.minorticks_on() #補助目盛りをつける
plt.grid(which='major') #主目盛りに対してグリッドを書く

plt.plot(x, y1, label='sin', marker='+', markersize=5)
plt.plot(x, y2, label='cos', marker='.', markersize=5)
plt.legend(bbox_to_anchor=(1, 1), loc='upper right', borderaxespad=0.5, fontsize=18);
```

出力はこんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541751/77f9d65e-5e2a-facb-893c-0dfa93ef1273.png)


plotの際のマーカーについてこの方が全て試して下さっています。
http://ailaby.com/plot_marker/

凡例(legend)の使い方についてまとめて下さっています。凡例はきっちりと書かないと残念なグラフになってしまうので特に重要ですね。
https://qiita.com/matsui-k20xx/items/291400ed56a39ed63462

# 6.総括・今後の展望
今回1つのプロットのレイアウトについてまとめてみました。
設定できることが意外と多くてびっくりしました(小並感)。<br>
figやaxを使った複数のグラフの書き方もいつか自分でもまとめてみようと思います。
この方のqiitaがめっちゃまとまってそうなので、その際はぜひ参考にさせて頂きます。
https://qiita.com/nkay/items/d1eb91e33b9d6469ef51<br>
他にも、matplotlibのいろんなグラフやseabornについてもまとめてみたいですね。