matplotlibの基本操作をJupyter Labで書いてみた

## この記事はかめ（＠usdatascientist）さんのブログ（https://datawokagaku.com/python_for_ds_summary/） に書かれているmatplotlibの基本操作を実際にJupyter Labを用いてコーディングしてみた、という記事です。

## matplotlibの基本操作まとめ

## 第２０回


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


```python
x = np.linspace(-3, 3, 10)
y = np.exp(x)
print(x)
print(y)
```

    [-3.         -2.33333333 -1.66666667 -1.         -0.33333333  0.33333333
      1.          1.66666667  2.33333333  3.        ]
    [ 0.04978707  0.09697197  0.1888756   0.36787944  0.71653131  1.39561243
      2.71828183  5.29449005 10.3122585  20.08553692]



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




    [<matplotlib.lines.Line2D at 0x7f0518676c50>]




![png](output_5_1.png)


## 付属情報をつける
#### matplotlibで描画する際に，様々な付属情報をつける(もしくは消す)ことができます．よく使うのは以下の通りです．
#### plt.xlabel()でx軸にラベルをつける
#### plt.ylabel()でy軸にラベルをつける
#### plt.title()で図にタイトルをつける
#### plt.plot(label=’ラベル’)でplotにラベルをつけ, plt.legend()で凡例をつける
#### plt.xticks()でx軸に任意のticksをつける
#### plt.yticks()でy軸に任意のticksをつける
#### plt.axis(‘off’)で軸を消す


```python
plt.plot(x,y)
# plt.xlabel()でx軸にラベルをつける
plt.xlabel('Efforts')
# plt.ylabel()でy軸にラベルをつける
plt.ylabel('Earning')
# plt.title()で図にタイトルをつける
plt.title('This is how your efforts earns')
```




    Text(0.5, 1.0, 'This is how your efforts earns')




![png](output_7_1.png)



```python
# plt.plot(label='ラベル')でplotにラベルをつけ, plt.legend()で凡例をつける
plt.plot(x, y, label='Earning with effort')
plt.legend()
# plt.xticks()でx軸に任意のticksをつける
plt.xticks(np.arange(-3, 4, 0.5))
# plt.yticks()でy軸に任意のticksをつける
plt.yticks([0, 5, 10, 20])
plt.show()
```


![png](output_8_0.png)



```python
x = np.linspace(-3, 3, 10)
y1 = np.exp(x)
y2 = np.exp(x)*2
plt.plot(x, y1, label='first')
plt.plot(x, y2, label='second')
plt.legend()
```




    <matplotlib.legend.Legend at 0x7f05182abc50>




![png](output_9_1.png)



```python
plt.plot(x, y1, label='first')
plt.plot(x, y2, label='second')
plt.axis('off')
# plt.axis('off')で軸を消す
plt.legend()
```




    <matplotlib.legend.Legend at 0x7f05182f8e10>




![png](output_10_1.png)


## 第２１回

## subplot


```python
x = np.linspace(-3, 3, 10)
y1 = np.exp(x)
y2 = x*x

plt.subplot(1, 2, 1)
plt.plot(x, y1)

plt.subplot(1, 2, 2)
plt.plot(x, y2)
```




    [<matplotlib.lines.Line2D at 0x7f0505d1d690>]




![png](output_13_1.png)


## オブジェクト指向による記述

## plt.figureオブジェクト


```python
fig = plt.figure()
type(fig)
```




    matplotlib.figure.Figure




    <Figure size 432x288 with 0 Axes>



```python
fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)

ax1.plot(x, y1)
ax2.plot(x, y2)
```




    [<matplotlib.lines.Line2D at 0x7f0505aead10>]




![png](output_17_1.png)



```python
# 1行2列のplotを作成 axesにはそれぞれのaxesオブジェクトがリストで返される
fig, axes = plt.subplots(nrows=1, ncols=2)
axes
```




    array([<matplotlib.axes._subplots.AxesSubplot object at 0x7f0505bd2650>,
           <matplotlib.axes._subplots.AxesSubplot object at 0x7f0505a22a10>],
          dtype=object)




![png](output_18_1.png)



```python
fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].plot(x, y1)
axes[1].plot(x, y2)
```




    [<matplotlib.lines.Line2D at 0x7f0505894fd0>]




![png](output_19_1.png)



```python
fig, axes = plt.subplots(nrows=3, ncols=3)
print(axes.shape)
```

    (3, 3)



![png](output_20_1.png)



```python
fig, axes = plt.subplots(nrows=3, ncols=3)
axes[1,2].plot(x,y2)
```




    [<matplotlib.lines.Line2D at 0x7f05055cee90>]




![png](output_21_1.png)



```python
fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].plot(x, y1, label='something')
axes[1].plot(x, y1)
axes[0].set_xlabel('xlabel1')
axes[0].set_ylabel('xlabel2')
axes[0].set_title('plot title')
axes[0].set_xticks([-3, -2, -1, 3])
axes[0].set_yticks([0, 10, 20])
axes[0].legend()
axes[1].axis('off')
```




    (-3.3, 3.3, -0.9520004243731263, 21.08732441592866)




![png](output_22_1.png)


## 第２２回

## グラフの大きさを調整する


```python
x = np.linspace(-3, 3, 10)
y1 = np.exp(x)
y2 = np.exp(x)*2
fig, axes = plt.subplots()
axes.plot(x, y1)
```




    [<matplotlib.lines.Line2D at 0x7f0505c7cb10>]




![png](output_25_1.png)



```python
#この場合モニタで１００画素x１００画素のグラフが表示される
fig, axes = plt.subplots(figsize=(1,1), dpi=100)
axes.plot(x, y1)
```




    [<matplotlib.lines.Line2D at 0x7f0505308750>]




![png](output_26_1.png)



```python
fig, axes = plt.subplots(figsize=(10, 3))
axes.plot(x, y1)
```




    [<matplotlib.lines.Line2D at 0x7f05056641d0>]




![png](output_27_1.png)


## pngで保存する


```python
fig, axes = plt.subplots(2, 1, figsize=(10, 3))
axes[0].plot(x, y1, label='something')
axes[1].plot(x, x*x)

axes[0].set_title('first')
axes[1].set_title('second')

axes[0].set_xlabel('x')
axes[0].set_ylabel('y')
axes[1].set_xlabel('x')
axes[1].set_ylabel('y')

fig.savefig('savefig_sample.png')
```


![png](output_29_0.png)



```python
fig, axes = plt.subplots(2, 1, figsize=(10, 3))
axes[0].plot(x, y1, label='something')
axes[1].plot(x, x*x)

axes[0].set_title('first')
axes[1].set_title('second')

axes[0].set_xlabel('x')
axes[0].set_ylabel('y')
axes[1].set_xlabel('x')
axes[1].set_ylabel('y')

plt.tight_layout() #グラフを見やすく調整する

fig.savefig('savefig_sample.png')
```


![png](output_30_0.png)



```python
fig, axes = plt.subplots()
axes.plot(x, y1, label='first')
axes.plot(x, y2, label='second')
axes.plot(x, y1+y2, label='first+second')
axes.legend()
```




    <matplotlib.legend.Legend at 0x7f0505664f50>




![png](output_31_1.png)


## pdfで保存する


```python
from matplotlib.backends.backend_pdf import PdfPages
```


```python
pdf = PdfPages('savefig_sample.pdf')
```


```python
from matplotlib.backends.backend_pdf import PdfPages

pdf = PdfPages('savefig_sample.pdf')

#------グラフ作成-------
fig, axes = plt.subplots()
axes.plot(x, y1, label='first')
axes.plot(x, y2, label='second')
axes.plot(x, y1+y2, label='first+second')
axes.legend(loc=0)
#---------------------

#pdfに保存
pdf.savefig(fig)
#close処理（一応やる）
pdf.close()
```


![png](output_35_0.png)


## 大量のグラフをpdfで保存する


```python
pdf = PdfPages('savemultifig_sample.pdf')
for i in range(0, 10):
    #------グラフ作成--------
    fig, axes = plt.subplots( )
    #グラフの形状が徐々にかわるように設計しました．（適当です．）
    axes.plot(x, y1 + x*i)
    #タイトルをつけます．pdfで文字検索ができることを確認してください．
    axes.set_title('ID:#{}'.format(i))
    #-----------------------

    #forループのなかで保存
    pdf.savefig(fig)

#ループ後に閉じます
pdf.close()
```


![png](output_37_0.png)



![png](output_37_1.png)



![png](output_37_2.png)



![png](output_37_3.png)



![png](output_37_4.png)



![png](output_37_5.png)



![png](output_37_6.png)



![png](output_37_7.png)



![png](output_37_8.png)



![png](output_37_9.png)


## 第２３回

## グラフの装飾のしかた


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


```python
x = np.linspace(-3, 3, 10)
y = np.exp(x)
plt.plot(x, y)
```




    [<matplotlib.lines.Line2D at 0x7f050476fd90>]




![png](output_41_1.png)


#### color : グラフの線の色　⇨　’red’や’green’のように色の名前を指定します．’r’や’g’のように頭文字でもOKです．
#### lw (line width) : 線の太さ　⇨　数字です．好みの大きさにしてください
#### ls (line style) : 線の種類　⇨　’-‘や’–‘のように指定します．よく使うのはこの二つのどちらかです．
#### marker : マーカーの種類　⇨　’o’や’x’ように指定します．マーカーの形が変わります．
#### markersize : マーカーの大きさ　⇨　数字です．好みの大きさにしてください
#### markerfacecolor : マーカーの色　⇨　’red’や’green’のように色の名前を指定します．’r’や’g’のように頭文字でもOKです．
#### markeredgecolor : マーカーの枠に色　⇨　’red’や’green’のように色の名前を指定します．’r’や’g’のように頭文字でもOKです．
#### markeredgewidth : マーカーの枠の太さ　⇨　数字です．好みの大きさにしてください
#### alpha : plotの透明度　⇨　0から1の間をfloatで指定します．0に近い程透明度が上がります．


```python
plt.plot(x, y, color='red', lw=5, ls='--', marker='o', markersize=15, markerfacecolor='yellow', markeredgecolor='blue',
        markeredgewidth=4, alpha=0.5)
```




    [<matplotlib.lines.Line2D at 0x7f05050fbd90>]




![png](output_43_1.png)


## 散布図: plt.scatter()


```python
import pandas as pd
df = pd.read_csv('train.csv')
plt.scatter(df['Age'], df['Fare'], alpha=0.3)
```




    <matplotlib.collections.PathCollection at 0x7f04b99fbf50>




![png](output_45_1.png)


## ヒストグラム： plt.hisgt()


```python
plt.hist(df['Age'])
plt.show()
```

    /opt/anaconda3/lib/python3.7/site-packages/numpy/lib/histograms.py:829: RuntimeWarning: invalid value encountered in greater_equal
      keep = (tmp_a >= first_edge)
    /opt/anaconda3/lib/python3.7/site-packages/numpy/lib/histograms.py:830: RuntimeWarning: invalid value encountered in less_equal
      keep &= (tmp_a <= last_edge)



![png](output_47_1.png)



```python
plt.hist(df['Age'], bins=50)
plt.show()
```


![png](output_48_0.png)


## 箱ひげ図: plt.boxplot()


```python
df = df.dropna(subset=['Age'])
plt.boxplot(df['Age'])
plt.show()
```