2018年4月15日日曜日

Pythonのmatplotlibでラベル付き散布図を作成する

Pythonのグラフ描画ライブラリmatplotlibで散布図を作成するときに、各要素にラベルを表示する方法がある。こうしておくと、各要素が何のデータなのかがわかるようになる。機械学習ライブラリscikit-learnのデータセットを使って、ラベル付き散布図を作成してみる。


環境


Bash on Ubuntu on Windows


Jupyter Notebook



irisデータセットの準備


散布図の作成にscikit-learnのirisデータセットを使う。読み込んでPandasのDataFrameに変換しておく。

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris

# scikit-learnのirisデータセット読み込み
iris = load_iris()
# irisデータセットをPandasのDetaFrameに変換
df = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target'])

print(df.head())

PandasのDataFrameに変換したデータは以下の通り。インデックスの数字を散布図でラベルとして表示する。



ラベル付き散布図を作成する


irisデータの「sepal length (cm)」と「sepal width (cm)」を使って散布図を作成する。ラベルの表示にはannotateメソッドを使う。

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris

%matplotlib inline
from IPython.core.pylabtools import figsize
import matplotlib.pyplot as plt

figsize(11, 9)

# scikit-learnのirisデータセット読み込み
iris = load_iris()
# irisデータセットをPandasのDetaFrameに変換
df = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target'])

# X軸の項目
colx = df.columns[0]
# Y軸の項目
coly = df.columns[1]
# 凡例
labels = iris.target_names

# targetごとに色分けしてプロットする
groups = df.groupby('target')
for l, (status, group) in zip(labels, groups):
    plt.plot(group[colx], group[coly], marker='o', linestyle='', ms=4, label=l)
    plt.legend()

# 各要素にDataFrameのインデックスの数字をラベルとして付ける
for i, txt in enumerate(df.index.values):
    plt.annotate(txt, (df[colx].values[i], df[coly].values[i]))

plt.xlabel(colx)
plt.ylabel(coly)
plt.grid(True)
plt.show()

以下のように各要素にインデックスの数字が付いた散布図が作成される。


0 件のコメント:

コメントを投稿