なんどねずみ

だいたい名古屋

matplotlibでグラフを描く

はじめに

仕事でデータまとめをする機会があり、あわてて統計を勉強しています。座学だけだとつまらないので、Pythonでグラフを作成しながら勉強することにしました。毎回コードの書き方を調べるのが面倒なので、基礎的な使い方をまとめました。内容は追加していくかもしれません。実行環境はPython 3.7.4、Jupyter Notebook 6.0.1、matplotlib 3.1.1です。

準備

グラフのデータとなる乱数を生成する

今回はグラフを描くことが目的なのでデータは何でもいいです。データセットを用意するのが面倒なので、Nampyで生成した乱数を用いてグラフを描きます。下記コードでは平均(loc) 50、標準偏差(scale) 10の正規分布の乱数を3つ(size)生成します。

import numpy as np
rand = np.random.normal(50, 10, 3) #平均50,標準偏差10,サイズ3
print(rand)
# 出力結果:[61.28109899 37.59654054 61.0125996 ]

Jupyter Notebookのおまじない

Jupyter Notebook上でグラフを表示させるには、下記のいずれかをコードの最初に書く必要があります。

%matplotlib inline #グラフ固定の場合

f:id:nandonezumi:20211211154556p:plain
%matplotlib inline の表示例

%matplotlib notebook #Jupyter上で移動、拡大、縮小したい場合

f:id:nandonezumi:20211213213914p:plain
%matplotlib notebook の表示例

グラフを描く

折れ線グラフ

import numpy as np
import matplotlib.pyplot as plt

# 乱数を生成
x = list(range(10)) #10個の連続値
y = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10

# グラフの描画
plt.plot(x, y)
plt.show()
f:id:nandonezumi:20211211154556p:plain

棒グラフ

import numpy as np
import matplotlib.pyplot as plt

# 乱数を生成
x = list(range(10)) #10個の連続値
y = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10

# グラフの描写
plt.bar(x, y)
plt.show()
f:id:nandonezumi:20211213215620p:plain

散布図

import numpy as np
import matplotlib.pyplot as plt
 
# 乱数を生成
x = np.random.normal(50, 10, 1000)  #平均50,標準偏差10,サイズ1000
y = np.random.normal(50, 10, 1000)  #平均50,標準偏差10,サイズ1000
 
# 散布図を表示
plt.scatter(x, y)
plt.show()
f:id:nandonezumi:20211211152131p:plain

ヒストグラム

import numpy as np
import matplotlib.pyplot as plt

# 乱数を作成
x = np.random.normal(50, 10, 1000) #平均50,標準偏差10,サイズ1000
 
# ヒストグラムを表示
plt.hist(x, bins=10) #10でビニング
plt.show()
f:id:nandonezumi:20211211151404p:plain

箱ひげ図

import numpy as np
import matplotlib.pyplot as plt

# 乱数を生成
x = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10

# グラフの描写
plt.boxplot(x)
plt.show()
f:id:nandonezumi:20211213215950p:plain

円グラフ

import numpy as np
import matplotlib.pyplot as plt

# 乱数を生成
x = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10

# 円グラフの描画
plt.pie(x)
plt.show()
f:id:nandonezumi:20211213220421p:plain

グラフの設定

グラフを画像として保存する

import numpy as np
import matplotlib.pyplot as plt

# 乱数を生成
x = list(range(10)) #10個の連続値
y = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10

# グラフの保存
plt.plot(x, y)
plt.savefig("sample.png")
plt.show()

複数のデータをプロットする

import numpy as np
import matplotlib.pyplot as plt

# 乱数を生成
x = list(range(10)) #10個の連続値
y1 = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10
y2 = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10

# グラフの描画
plt.plot(x, y1)
plt.plot(x, y2)
plt.show()
f:id:nandonezumi:20211211155522p:plain

複数のグラフを分割して表示

import numpy as np
import matplotlib.pyplot as plt

# 乱数を生成
x = list(range(10)) #10個の連続値
y1 = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10
y2 = np.random.normal(50, 10, 10) #平均50,標準偏差10,サイズ10

# グラフの描画
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1) #nrows=2,ncols=1,index=1
ax.plot(x, y1)
ax = fig.add_subplot(2, 1, 2) #nrows=2,ncols=1,index=2
ax.plot(x, y2)
plt.show()
f:id:nandonezumi:20211211160218p:plain

subplotの引数は、nrowsとncolsで分割する数を決めます。indexは格子の左上から順に1,2,…となります。

f:id:nandonezumi:20211211181221p:plain:w540

参考リンク

Matplotlib documentation — Matplotlib 3.5.0 documentation

matplotlib でグラフ作成 – Python でデータサイエンス