NumPy+Matplotlibで散布図の頂点に色をつける

散布図のマーカーに"+"を指定して「あれー、色を指定しても反映されないなー」と悩んでいたが、指定した色はマーカーの塗りに使われるのであった。"+"だと塗りがないから色が変わらないというオチ。edgecolorを指定すればいいんだろうけどマーカーを"o"に変えたらなかなかかっこ良かったのでこっちにする。

scatterの引数cに各頂点の色を指定すればよい。下のコードではresp_for_each_dataが合計すると1になる2要素のベクトルになっているので、その比率で赤と緑を混ぜ合わせてcolorsを作っている。

    red = array([1, 0, 0])
    green = array([0, 1, 0])
    colors = [red * r[0] + green * r[1] for r in resp_for_each_data]
    scatter(data[:, 0], data[:, 1], c=colors, alpha=0.5, marker="o")