散布図を描くにはscatterを用いる。scatterとlegendを組み合わせて使う場合の例はこちらにある。
Scatter plots with a legend — Matplotlib 3.1.2 documentation
これによると以下の2つの方法がある
- 凡例としてつけたいlabel毎にscatterを呼ぶ
- x, y, cにそれぞれリストを渡しscatterを一度だけ呼ぶ
2.の方法では凡例のラベルとしてcolorで指定した数字が入ることになる。scatterにはlabelも引数として渡せるため、ラベルのリストも作って渡してみたが反映されなかった。 そのため凡例として文字列をつけたい場合は1.の方法でやる必要がある。
データがx, y, labelのリスト(data_listとする)として保持されてるとすると1.の場合はこんな感じ
data = {} for x, y, label in data_list: if label not in data: data[label] = {'x':[], 'y':[]} data[label]['x'].append(x) data[label]['y'].append(y) for label, item in sorted(data.items(), key=lambda x:x[0]): plt.scatter(item['x'], item['y'], label=label)
ちなみにdataに対してsortedをかけているのは凡例のラベルを降順に並べ替えるため。