[Python]Matplotlibで散布図を描画する方法


散布図を書くにはscatterを使う。
以下にいくつかの例を示す。

## 単純な散布図
下記は最も単純な散布図の例。

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

# generate data
x = np.random.rand(100)
y = np.random.rand(100)

fig = plt.figure()

ax = fig.add_subplot(1,1,1)

ax.scatter(x,y)

ax.set_title('first scatter plot')
ax.set_xlabel('x')
ax.set_ylabel('y')

fig.show()
```
![scatter01.png](https://qiita-image-store.s3.amazonaws.com/0/100523/53d0dd61-99f4-c8eb-3659-aa8602f0a85a.png)

## データごとに色を変える
パラメータにc='red'のように指定して色を変えることができる。

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

# generate data
x1 = np.random.rand(100)*0.5
y1 = np.random.rand(100)

x2 = np.random.rand(100)*0.5 + 0.5
y2 = np.random.rand(100)

fig = plt.figure()

ax = fig.add_subplot(1,1,1)

ax.scatter(x1,y1, c='red')
ax.scatter(x2,y2, c='blue')

ax.set_title('second scatter plot')
ax.set_xlabel('x')
ax.set_ylabel('y')

fig.show()
```
![scatter02.png](https://qiita-image-store.s3.amazonaws.com/0/100523/7af37198-eaad-b08b-c604-305775260c41.png)

RGBで指定しても同じ結果になる。この時値は0.0 - 1.0の値で指定する。

```py
ax.scatter(x1,y1, c=(1.0,0,0))
ax.scatter(x2,y2, c=(0, 0, 1.0))
```

## 凡例とgrid線の追加
凡例はlegendを使用する。引数で表示する位置を変えることができる。
grid線を引きたい場合はgrid(True)とする。

|位置|
|:----:|
|upper right|
|upper left |
|lower left |
|lower right|
|right      |
|center left|
|center right|
|lower center|
|upper center|
|center      |

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

# generate data
x1 = np.random.rand(100)*0.5
y1 = np.random.rand(100)*0.5

x2 = np.random.rand(100)*0.5 + 0.5
y2 = np.random.rand(100)*0.5

x3 = np.random.rand(100)*0.5
y3 = np.random.rand(100)*0.5 + 0.5

x4 = np.random.rand(100)*0.5 + 0.5
y4 = np.random.rand(100)*0.5 + 0.5

fig = plt.figure()

ax = fig.add_subplot(1,1,1)

ax.scatter(x1,y1, c='red', label='group1')
ax.scatter(x2,y2, c='blue', label='group2')
ax.scatter(x3,y3, c='green', label='group3')
ax.scatter(x4,y4, c='yellow', label='group4')

ax.set_title('third scatter plot')
ax.set_xlabel('x')
ax.set_ylabel('y')

ax.grid(True)

ax.legend(loc='upper left')
fig.show()
```
![scatter03.png](https://qiita-image-store.s3.amazonaws.com/0/100523/46ab6f30-773e-cec3-daed-2a8d59ca5d1e.png)

## マーカーを変える
マーカーはmarker='o'のように指定する。
代表的な４つのマーカを例に使用した。他にもいろいろある。[ここ](http://matplotlib.org/api/markers_api.html#module-matplotlib.markers)を参照するとよい。

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

# generate data
x1 = np.random.rand(100)*0.5
y1 = np.random.rand(100)*0.5

x2 = np.random.rand(100)*0.5 + 0.5
y2 = np.random.rand(100)*0.5

x3 = np.random.rand(100)*0.5
y3 = np.random.rand(100)*0.5 + 0.5

x4 = np.random.rand(100)*0.5 + 0.5
y4 = np.random.rand(100)*0.5 + 0.5

fig = plt.figure()

ax = fig.add_subplot(1,1,1)

ax.scatter(x1,y1, c='red', marker='.', label='group1')
ax.scatter(x2,y2, c='blue',marker='o', label='group2')
ax.scatter(x3,y3, c='green',marker='^', label='group3')
ax.scatter(x4,y4, c='yellow',marker='s', label='group4')

ax.set_title('fourth scatter plot')
ax.set_xlabel('x')
ax.set_ylabel('y')

ax.grid(True)

ax.legend(loc='upper left')
fig.show()
```
![scatter04.png](https://qiita-image-store.s3.amazonaws.com/0/100523/1014c993-9362-c8b1-dee5-2927d5bcc8fc.png)

## マーカーの大きさを変える
マーカーの大きさはパラメータでs=20のようにする。デフォルトの大きさは20。

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

# generate data
x1 = np.random.rand(100)*0.5
y1 = np.random.rand(100)*0.5

x2 = np.random.rand(100)*0.5 + 0.5
y2 = np.random.rand(100)*0.5

x3 = np.random.rand(100)*0.5
y3 = np.random.rand(100)*0.5 + 0.5

x4 = np.random.rand(100)*0.5 + 0.5
y4 = np.random.rand(100)*0.5 + 0.5

fig = plt.figure()

ax = fig.add_subplot(1,1,1)

ax.scatter(x1,y1, c='red', s=20, marker='o', label='group1')
ax.scatter(x2,y2, c='blue',s=40, marker='o', label='group2')
ax.scatter(x3,y3, c='green',s=80, marker='o', label='group3')
ax.scatter(x4,y4, c='yellow',s=120, marker='o', label='group4')

ax.set_title('fifth scatter plot')
ax.set_xlabel('x')
ax.set_ylabel('y')

ax.grid(True)

ax.legend(loc='upper left')
fig.show()
```
![scatter05.png](https://qiita-image-store.s3.amazonaws.com/0/100523/0eddee23-fb54-f05c-eef6-b70a7dbd9b6e.png)