2016-07-11 7 views
3

私は3つの系列データx、y、zを持っているとするユーザーケースがあります。 plt.scatterのcmapキーワードを使って、(x、y)を座標として、zを散布点の色として使う散布図を作ってみたいと思います。しかし、私は他の点よりも異なるマーカーの種類とサイズを使用して、いくつかの特定の点を強調したいと思います。カラーマップを使用したMatplotlib散布図の特定の点のマーカタイプを設定する方法

最小の例は以下のようである:

x,y,z = np.random.randn(3,10) 
plt.scatter(x,y,c=z,cmap=matplotlib.cm.jet) 
plt.colorbar()​ 

私は異なるマーカータイプを使用する場合(X [5]、Y [5]、Z [5])、どの可能性それを行う? 私が考えることができる唯一の方法は、plt.scatter([x [5]、y [5])を使ってこの点を再プロットすることですが、手動でz [5]に対応するカラーマップカラーを見つけることによって色を定義します。しかし、これはかなり面倒です。より良い方法がありますか?

答えて

2

各散布図には1つの単一マーカーがあり、1つの散布図で異なるマーカーを使用することはできません。したがって、マーカを変更してマーカを同じにしておけば、scatters引数に異なるサイズの配列を指定できます。

import matplotlib.pyplot as plt 
import numpy as np; np.random.seed(10) 

x,y,z = np.random.randn(3,10) 

sizes = [36]*len(x) 
sizes[5] = 121 
plt.scatter(x,y,c=z,s=sizes, cmap=plt.cm.jet) 

plt.colorbar() 

plt.show() 

enter image description here

あなたが本当に別のマーカー・スタイルが必要な場合は、新しい散布図をプロットする必要があります。次に、2番目の散布図の色の制限を1番目の散布図の色の制限に設定できます。

import matplotlib.pyplot as plt 
import numpy as np; np.random.seed(10) 

x,y,z = np.random.randn(3,10) 
xs, ys, zs = [x[5]], [y[5]], [z[5]] 
print xs, ys, zs 
y[5] = np.nan 

sc = plt.scatter(x,y,c=z,s=36, cmap=plt.cm.jet) 
climx, climy = sc.get_clim() 
plt.scatter(xs,ys,c=zs,s=121, marker="s", cmap=plt.cm.jet, vmin=climx, vmax=climy ) 

plt.colorbar() 

plt.show() 

enter image description here

関連する問題