pythonのグラフ描画ライブラリである「matplotlib」で、散布図を作成する方法について紹介します。
本記事では、下記の内容を紹介しています。
この記事で分かること
- 散布図を作成する方法
- マーカーを変更(大きさ、形状、色、透明度)
- 複数のグラフを色分けして重ねて表示する方法
- データラベルを表示する方法
- カラーマップ(cmap)を適用する方法
- 3次元の散布図を作成する方法
- タイトル / 凡例 / 軸ラベル / 軸範囲の指定方法
はじめに、基本的な内容として、散布図を作成する方法を紹介します。
そのあとに、散布図のマーカーを変更する方法、データラベルを表示する方法など、散布図を見やすく表示する方法について紹介します。
スポンサーリンク
matplotlibで散布図を作成する方法
matplotlibには、散布図を作成するメソッドとして、 matplotlib.pyplot.scatter が用意されています。
matplotlib.pyplot.scatter の引数の指定方法について、 公式ドキュメント から引用しました。
matplotlib 公式ドキュメント
matplotlib.pyplot.scatter の詳しい使用方法については、 公式ドキュメント にて御確認ください。
以下、matplotlib.pyplot.scatter を用いて散布図を作成するサンプルコードです。
### matplotlibで散布図を作成
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y)
plt.show()
コード実行後、表示されるグラフはこちらになります。
> plt.scatter(x, y)
matplotlib.pyplot.scatter に、散布図生成用のデータ "x"、"y" を引数として渡しています。
スポンサーリンク
matplotlibの散布図のマーカーを変更する方法
次に、matplotliの散布図のマーカーを変更する方法について紹介します。
マーカー大きさ、形状、色、透明度の変更方法について、それぞれ順番に紹介します。
散布図のマーカーの大きさを変更
散布図のマーカーの大きさを変更する方法について紹介します。
マーカーの大きさは、matplotlib.pyplot.scatter の引数 s を指定すると変更できます。
以下、散布図のマーカーのサイズを変更するサンプルコードです。
### マーカーの大きさを変更
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y, s=150)
plt.show()
コード実行後、表示されるグラフはこちらになります。
散布図のマーカーの形状を変更
散布図のマーカーの形状を変更する方法について紹介します。
マーカーの大きさは、matplotlib.pyplot.scatter の引数 marker を指定すると変更できます。
以下、散布図のマーカーの形状を変更するサンプルコードです。
### マーカーの形状を変更
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y, marker='+')
plt.show()
コード実行後、表示されるグラフはこちらになります。
星形などにも変更できます。こちらは、marker= ' * ' とした例です。
散布図のマーカーの色を変更
散布図のマーカーの色を変更する方法について紹介します。
マーカーの大きさは、matplotlib.pyplot.scatter の引数 c を指定すると変更できます。
以下、散布図のマーカーの色を変更するサンプルコードです。
### マーカーの色を変更
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y, c='r')
plt.show()
コード実行後、表示されるグラフはこちらになります。
なお、matplotlibでグラフの要素の色を変更する方法については、下記の記事で詳しく紹介しています。
散布図のマーカーの透明度(alpha)を変更
散布図のマーカーの透明度を変更する方法について紹介します。
マーカーの大きさは、matplotlib.pyplot.scatter の引数 alpha を指定すると変更できます。
以下、散布図のマーカーの透明度を変更するサンプルコードです。
### マーカーの透明度を変更
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y, alpha=0.5)
plt.show()
コード実行後、表示されるグラフはこちらになります。
スポンサーリンク
matplotlibの散布図を色分けして複数重ねて表示
複数の散布図を色分けして重ねて表示する方法を紹介します。
以下、サンプルコードです。
### 色分けして複数重ねて表示
import matplotlib.pyplot as plt
import numpy as np
x1 = np.random.rand(100)
y1 = np.random.rand(100)
x2 = np.random.rand(100)
y2 = np.random.rand(100)
plt.scatter(x1, y1, c='r')
plt.scatter(x2, y2, c='b')
plt.show()
コード実行後、表示されるグラフはこちらになります。
> plt.scatter(x1, y1, c='r')
> plt.scatter(x2, y2, c='b')
引数 c で色を指定し、それぞれの散布図を描画しています。
matplotlibの散布図にデータラベルを表示する方法
散布図にデータラベルを表示する方法を紹介します。
matplotlib.pyplot.text 関数を用いることで、プロットの横にデータラベルを表示できます。
以下、matplotlib.pyplot.text 関数を用いて、データラベルを表示するサンプルコードです。
### データラベルを表示
import numpy as np
import matplotlib.pyplot as plt
x = np.random.rand(10)
y = np.random.rand(10)
labels = ['No.'+str(num) for num in range(1,len(x)+1)]
plt.figure(figsize=(6,6))
plt.xlabel('X')
plt.ylabel('Y')
plt.scatter(x, y, s=100)
for i, label in enumerate(labels):
plt.text(x[i], y[i],label)
plt.show()
コード実行後、表示されるグラフはこちらになります。
> labels = ['No.'+str(num) for num in range(1,len(x)+1)]
リスト内包表記で、プロットの横に表示するデータラベルを作成しています。
リスト内包表記については、下記の記事で紹介しています。
> for i, label in enumerate(labels):
> plt.text(x[i], y[i],label)
enumerate関数を用いて、インデックスと、値を取得しています。
matplotlib.pyplot.text 関数に、x座標、y座標、文字列を指定して、データラベルを描画しています。
enumerate関数については、下記の記事で紹介しています。
スポンサーリンク
matplotlibの散布図にカラーマップ(cmap)を適用する方法
散布図の色に、カラーマップを適用する方法について紹介します。
以下、サンプルコードです。
### 散布図にカラーマップを適用
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(50)
y = np.random.rand(50)
value = [v_x * v_y for (v_x, v_y) in zip(x, y)]
fig = plt.figure()
# カラーマップを生成
cm = plt.cm.get_cmap('jet')
plt.scatter(x, y, c=value, cmap=cm)
plt.colorbar()
plt.show()
コード実行後、表示されるグラフはこちらになります。
> value = [v_x * v_y for (v_x, v_y) in zip(x, y)]
データ x、y を用いて、プロットの値を計算しています。今回は例として、データの積を計算しています。
zip関数とリスト内包表記を用いて、リストの要素同士の掛け算を行っています。
zip関数の使い方については、下記の記事で紹介しています。
> cm = plt.cm.get_cmap('jet')
> plt.scatter(x, y, c=value, cmap=cm)
「jet」というカラーマップを呼び出しています。
引数 cmap に、呼び出したカラーマップを指定しています。
また、引数 c に前述のプロットの値 value を指定しています。
グラフの色にカラーマップを指定する方法は、下記の記事で紹介しています。
matplotlibで3次元の散布図を作成する方法
matplotlibで3次元の散布図を作成する方法を紹介します。
3次元の散布図を作成するために、fig.add_subplot の引数として projection='3d' を指定します。
なお、pythonのバージョンに依っては、「from mpl_toolkits.mplot3d import Axes3D」のインポートが必要な場合もあります。
以下、3次元の散布図を作成するサンプルコードです。
### matplotlibで3次元の散布図を作成する方法
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(50)
y = np.random.rand(50)
z = np.random.rand(50)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
cm = plt.cm.get_cmap('jet')
# 3次元の散布図を描画。戻り値としてmappableオブジェクトを取得。
mappable = ax.scatter(x, y, z, c=z, cmap=cm)
# カラーバーを描画
fig.colorbar(mappable, ax=ax)
plt.show()
コード実行後、表示されるグラフはこちらになります。
> fig = plt.figure()
> ax = fig.add_subplot(111, projection='3d')
fig.add_subplot の引数として projection='3d' を指定しています。
> mappable = ax.scatter(x, y, z, c=z, cmap=cm)
3次元の散布図を作成するため、データのリストとして、x、y、zを渡しています。
スポンサーリンク
matplotlib散布図のタイトル / 凡例 / 軸ラベル / 軸範囲など
散布図を見やすくするために、グラフのタイトル、凡例、軸ラベルを表示する方法や、軸範囲を指定する方法をいっきに紹介します。
以下、サンプルコードです。
### タイトル、凡例、軸ラベルの表示
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y)
# grid表示
plt.grid(True)
# 範囲
plt.xlim(left=-1, right=1)
plt.ylim(bottom=-1, top=1)
# 軸ラベル
plt.xlabel('X')
plt.ylabel('Y')
# グラフタイトル
plt.title('Title')
# 凡例
plt.legend(['data1'])
plt.show()
コード実行後、表示されるグラフはこちらになります。
> plt.grid(True)
グラフにグリッドを表示しています。
> plt.xlim(left=-1, right=1)
> plt.ylim(bottom=-1, top=1)
グラフの軸の表示範囲を指定しています。
> plt.xlabel('X')
> plt.ylabel('Y')
グラフの軸ラベルを指定しています。
> plt.title('Title')
グラフのタイトルを指定しています。
> plt.legend(['data1'])
グラフの凡例を指定しています。
凡例の表示方法については、下記の記事で紹介しています。
matplotlib散布図をオブジェクト指向で作成する場合【subplots】
グラフのタイトル、凡例、軸ラベルを表示する方法について、オブジェクト指向でグラフを作成した場合の指定方法を紹介します。
matplotlibのグラフ描画方法には2つの方法があり、
pyplot.*** で簡易的にグラフを描画する方法と、
fig, ax = plt.subplots() などでオブジェクトを作成したあとに、ax.plotなどでグラフを描画する方法があります。
fig, axなどでオブジェクトを作成する方法の方が、グラフの要素を細かく調整できます。
上記2つの方法で、軸の範囲指定を行うメソッドが微妙に異なりますので、参考までに紹介します。
前述のサンプルコードと比べてみてください。
以下、サンプルコードです。
### オブジェクト指向でグラフを作成し、タイトルなどを表示
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
fig, ax = plt.subplots()
ax.scatter(x, y)
# grid表示
ax.grid(True)
# 範囲
ax.set_xlim(left=-1, right=1)
ax.set_ylim(bottom=-1, top=1)
# 軸ラベル
ax.set_xlabel('X')
ax.set_ylabel('Y')
# グラフタイトル
ax.set_title('Title')
# 凡例
ax.legend(['data1'])
plt.show()
コード実行後、表示されるグラフはこちらになります。
スポンサーリンク