51362


心拍数と、湿度をセンサーで取得し関係をmatplotlibで表示させています。

下記の図のように  
[![図１](https://i.stack.imgur.com/kBgCc.png)](https://i.stack.imgur.com/kBgCc.png)  
グラフの画像内の右上に 赤○ ang  
青○ relax  
というように表示させたいです。

プログラムを書いてみたのですが右上に小さな箱しか出てきません。[![図２](https://i.stack.imgur.com/cAyGS.png)](https://i.stack.imgur.com/cAyGS.png)

解決方法を教えてくだされば幸いです。

ソースです

[code]

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from matplotlib.colors import ListedColormap
    colors = ['red','blue']
    cmap = ListedColormap(colors)
    from sklearn import datasets
    from sklearn.cluster import KMeans
    import pandas as pd
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    def main():
        # クラスタ数
        N_CLUSTERS = 2
    
        # Blob データを生成する
        ##dataset = datasets.make_blobs(centers=N_CLUSTERS)
    
    
        # 正解ラベルは使わない
        # targets = dataset[1]
    
        #csv read
        data = pd.read_csv('heartRate1.csv',names=('heart','hum'))
    
        #yokoziku sinpaku
        #tateziku situdo(hum)
    
        #del(data['cute'])
        #del(data['ang'])
    
    
        #data_array = data.as_matrix().T
    
        data_array = np.array([data['heart'].tolist(),
                               data['hum'].tolist()], np.float32)
    
    
        # 特徴データ
        features = data_array.T
    
        # クラスタリングする
        cls = KMeans(n_clusters=N_CLUSTERS)
        pred = cls.fit_predict(features)
    
        # 各要素をラベルごとに色付けして表示する
    
        #ave=np.average(y)
    
        ax=plt.subplot()
        ##for i in range(N_CLUSTERS):
           ## labels = features[pred == i]
        plt.scatter(features[:, 0], features[:, 1], c=pred, cmap=cmap)
        plt.plot(label="ang")
        plt.plot(label="relax")
        plt.legend()
    
    
        # クラスタのセントロイド (重心) を描く
        centers = cls.cluster_centers_
        plt.scatter(centers[:, 0], centers[:, 1], s=100,
                    facecolors='none', edgecolors='black')
    
     # ax.set_ylim([ave*50,ave*80]
        ##fig, axes = plt.figure()
    
        ##plot1 = fig.add_subplot(221)
        plt.title("clustering")
    
    
        ax.set_xlabel('heartrate[-]')
        ax.set_ylabel('humidity[%]')
    
    
        plt.show()
    
    
    if __name__ == '__main__':
        main()
    
[/code]


CC BY-SA 4.0
2018-12-19T13:40:59.720
51357
2018-12-19T16:43:02.270
2018-12-19T14:23:39.910
3060
31322
question
python matplotlib
matplotlib グラフ内に凡例（legend）を表示させたい


matplotlib の `scatter()` を使っている場合、各 `scatter()` に引数 `label`
を渡してグループの名前を付けてプロットしてから `legend()` を呼び出すと凡例を表示できます。以下は小さい動作例です。

[code]

    import matplotlib.pyplot as plt
    import numpy as np
    
    x, y = np.random.rand(2, 10)
    plt.scatter(x, y, c='red', label='foo')
    
    x, y = np.random.rand(2, 10)
    plt.scatter(x, y, c='blue', label='bar')
    
    plt.legend()
    plt.show()
    
[/code]

  * 関連 
    * [Scatter plots with a legend](https://matplotlib.org/gallery/lines_bars_and_markers/scatter_with_legend.html) \-- matplotlib
    * [matplotlib scatterplot with legend](https://stackoverflow.com/q/42056713/5989200) \-- Stack Overflow


CC BY-SA 4.0
2018-12-19T16:43:02.270
51362
2018-12-19T16:43:02.270
19110
51357
answer