Pythonのグラフ描画ライブラリmatplotlibで散布図を作成するときに、各要素にラベルを表示する方法がある。こうしておくと、各要素が何のデータなのかがわかるようになる。機械学習ライブラリscikit-learnのデータセットを使って、ラベル付き散布図を作成してみる。
Bash on Ubuntu on Windows
Jupyter Notebook
散布図の作成にscikit-learnのirisデータセットを使う。読み込んでPandasのDataFrameに変換しておく。
PandasのDataFrameに変換したデータは以下の通り。インデックスの数字を散布図でラベルとして表示する。
irisデータの「sepal length (cm)」と「sepal width (cm)」を使って散布図を作成する。ラベルの表示にはannotateメソッドを使う。
以下のように各要素にインデックスの数字が付いた散布図が作成される。
環境
Bash on Ubuntu on Windows
Jupyter Notebook
irisデータセットの準備
散布図の作成にscikit-learnのirisデータセットを使う。読み込んでPandasのDataFrameに変換しておく。
1 2 3 4 5 6 7 8 9 10 | 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メソッドを使う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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 件のコメント:
コメントを投稿