matplotlibを使ってグラフを作成してみた！〜その２〜

前回はグラフの基本を投稿しました。今回は様々な種類のグラフを作成し、投稿していきたいと思います。

散布図

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

# ランダムな点を生成する
x = np.random.rand(50)
y = np.random.rand(50)

# figureを生成する
fig = plt.figure()

# axをfigureに設定する
ax = fig.add_subplot(1, 1, 1)

# プロットマーカーの大きさ、色、透明度を変更
ax.scatter(x, y, s=300, alpha=0.5, linewidths=2, marker='*', c='#aaaaFF', edgecolors='blue')
plt.show()
```
実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/4bbab8d4-c445-81e2-6e3d-82e5b2b4616a.png)

matplotlibで散布図を描画する場合、axes.scatterを使用します。引数でマーカーサイズ、色、形などを指定することが可能です。色は16進数カラーコード以外に、CSSのカラーネームを使用することもできます。また、利用できるマーカーの例として以下が挙げられます。

　記号　マーカーの形
①　・　　　点
②　o　 　　円
③　*　　　 星印
④　＋　　　＋
⑤　X　 　　✕
⑥　D　　　 ひし形


棒グラフ

```py
import matplotlib.pyplot as plt
 
# ラベル
label = ['A', 'B', 'C', 'D', 'E']

# 対象データ
x = [1, 2, 3, 4, 5]  # 横軸
height = [3, 5, 1, 2, 3]  # 値

# figureを生成する
fig = plt.figure()
 
# axをfigureに設定する
ax = fig.add_subplot(1, 1, 1)
 
# axesに棒グラフを設定する
ax.bar(x, height, label=label, linewidth=1, edgecolor="#000000")
# 表示する
plt.show()
```

実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/b6a4a8ec-6f99-73e5-9480-c83a60ba1d4c.png)

matplotlibで棒グラフを作成する場合、axes.barを使用します。引数で幅、ラベル、色などを指定することが可能です。上記のコードでは、A 〜 Eの各値に対して棒グラフを描画しています。また、linewidth、edgecolorでグラフの枠線の太さと色を指定しています。


折れ線グラフ

```py
import matplotlib.pyplot as plt

# 対象データ
x = [1, 2, 3, 4, 5]

y1 = [100, 300, 200, 500, 0]
y2 = [150, 350, 250, 550, 50]
y3 = [200, 400, 300, 600, 100]
y4 = [250, 450, 350, 650, 150]

# figureを生成する
fig = plt.figure()

# axをfigureに設定する
ax = fig.add_subplot(1, 1, 1)

# axesにplot
ax.plot(x, y1, "-", c="#ff0000", linewidth=1, marker='*', alpha=1)
ax.plot(x, y2, "--", c="#00ff00", linewidth=2, marker='o', alpha=0.5)
ax.plot(x, y3, "-.", c="#0000ff", linewidth=4, marker='D', alpha=0.5)
ax.plot(x, y4, ":", c="#ff00ff", linewidth=4, marker='x', alpha=0.5)

# 表示する
plt.show()
```

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/266e76b9-ea01-e0ff-0b0f-e0c2b995f76b.png)

matplotlibで折れ線グラフを描画する場合、axes.plotを使用します。引数で折れ線の種類、色、太さ、マーカーの種類などを指定することができます。線の種類は、以下を指定することができます。

　　記号　意味
①　 -　　 実線
②　 --    破線
③　 -.    点+破線
④　 :     点線

関数のグラフ
```py
import matplotlib.pyplot as plt
import numpy as np

# 対象データ
x = np.linspace(0, 5, 100)  # x軸の値
y1 = x ** 2
y2 = np.sin(x)

# figureを生成する
fig = plt.figure()

# axをfigureに設定する
ax = fig.add_subplot(1, 1, 1)

# axesにplot
ax.plot(x, y1, "-")
ax.plot(x, y2, "-")

# 表示する
plt.show()
```

実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/8623ab21-a89f-9b3b-32a3-02867722da31.png)

NumPyのlinspaceを使用すると、指定区間内で、十分に要素数が多い関数のndarrayを作成することができます。また、ndarrayはユニバーサル関数で要素全体に関数を作用させることができるため、ax.plotと併せて使用すると滑らかなグラフを描画することができます。上記のコードでは、閉区間[0.5]を100で分割した、区間ごとの三角関数と二次関数のグラフを描画しています。

円グラフ

```py
import matplotlib.pyplot as pltの

# 対象データ
label = ["A", "B", "C", "D", "E"]
x = [40, 30, 15, 10, 5]

# figureを生成する
fig = plt.figure()

# axをfigureに設定する
ax = fig.add_subplot(1, 1, 1)

# axesにplot
ax.pie(x, labels=label, counterclock=False, startangle=90)

# 表示補正
ax.axis('equal')

# 表示する
plt.show()
```

実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/e4b6771c-08e2-10a5-65a7-2fb8db5a8afb.png)

matplotlibで円グラフを　描画する場合、axes.pieを使用します。引数で線の種類、色、太さ、マーカーの種類などを指定することが可能です。デフォルトパラメータが少し特殊で、パラメータを指定しない場合、円グラフの開始が3時の方向から、反時計回りで描画されます。このため、12時の方向から時計回りにしたい場合、counterclockとstartangleの指定が必要です。また、環境次第で円が押しつぶされるため、ax.axis(`equal`)を指定します。上記のコードでは、A〜Eのデータの円グラフを描画しています。


ヒストグラム

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

# 対象データ
x = np.random.normal(0, 10, 1000)
# figureを生成する
fig = plt.figure()

# axをfigureに設定する
ax = fig.add_subplot(1, 1, 1)

# axesにplot
ax.hist(x, bins=10, color="#00AAFF", ec="#0000FF", alpha=0.5)

# 表示する
plt.show()
```

実行結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/26c793b7-9014-2b09-364f-b9d82c6093ce.png)


matplotlibでヒストグラムを描画する場合、axes.histを使用します。パラメータを階級数や色を指定することが可能です。引数binsは少し変わった引数で、引数の型が何種類かあります。整数を指定するとその数の分の区間に分割します。一方で配列を指定するとその配列の階級となります。また、後述のスタージェスの公式で自動的に階級分けすることもできます。上記のコードでは、要素数1000個、平均0、標準格差10の正規分布の乱数の配列を生成し、ヒストグラムで可視化しています。


以上となります。前回今回含め、非常に中身の濃い内容でした。引き続き学習し投稿していきたいと思います。

エンジニアファーストの会社  [株式会社CRE-COエンジニアリングサービス](https://www.cre-co.jp/) 
  H.M