私はちょうどscipy
スタックから始まっています。私はCSV版で虹彩データセットを使用しています。ピラブ:ラベルを色にマップする
iris=numpy.recfromcsv("iris.csv")
し、それをプロットする:
pylab.scatter(iris.field(0), iris.field(1))
pylab.show()
今、私もiris.field(4)
に格納されているクラスを、プロットしたいと思います:
chararray(['setosa', ...], dtype='|S10')
私はうまく使ってそれを読み込むことができますこれらの文字列をプロットするための色にマップするエレガントな方法は何ですか? scatter(iris.field(0), iris.field(1), c=iris.field(4))
は動作しません(フロート値またはカラーマップが必要なドキュメントから)。私はカラーマップを自動的に生成するエレガントな方法を見つけられませんでした。
cols = {"versicolor": "blue", "virginica": "green", "setosa": "red"}
scatter(iris.field(0), iris.field(1), c=map(lambda x:cols[x], iris.field(4)))
お手数ですが、マニュアルカラー仕様があまり好きではありません。
編集:最後の行の少しよりエレガントなバージョン:
scatter(iris.field(0), iris.field(1), c=map(cols.get, iris.field(4)))
ありがとうございます。私はマルチプロットのオプションを見ましたが、私はあなたがここで使用したエレガントな状態のトリック(+1)をまだ認識していませんでした。私は「ばらばら」について同意しなければなりません。私の理解では、それはポイントが独立していて、接続されていないこの種のプロットのためのものです( 'linestyle =" none "'を設定して回避する) –
'plot'と' scatter'ポイントは不幸で、よくある誤解。点をプロットするには 'plot'を使用し、3番目または4番目の変数に基づいてマーカーのサイズや色を連続的に変更する必要がある場合は' scatter'を使ってプロットします。 'scatter'は、管理するのがはるかに難しいコレクションを返します。 'plot'_reallyは、切断された点をプロットすることを意図しています。デフォルトはちょうど線です。 'plt.plot(x、y、 'o')'は 'plt.plot(x、y、linestyle = 'none'、marker = 'o')'と同じことを行います。 。 –
ありがとうございます。私は '' np.unique(iris.field(4)) 'を使用します(私のCSVには列ラベル行がないので)。しかし、それ以外は私は本質的にあなたのコードを使用しています。私は条件トリックが本当に好きです。 –