2016-04-18 9 views
1

私は、色とマーカーと独立した次元の両方を使用する3Dスキャターを作成しました。私はカラーバーの凡例を追加しましたが、マーカーサイズの凡例を作成する方法を理解することはできません。matplotlibを使って3次元散布図のマーカーの凡例を作成するにはどうすればよいですか?

現在、プロットは次のようになります。理想的には

My current scatter plot: 、私は例えば0と250

の間に徐々に増加サイズの6つのマーカーを持って凡例を作成したいと思います:

Size | Label 
0 | 'Small' 
50 | 'Less Small' 
100 | 'Getting There' 
150 | 'Above Average' 
200 | 'Pretty Big' 
250 | 'Large' 

ここにプロットを生成するコードがあります。入力変数xp、yp、zp、cp、およびcoは、他の場所で生成したリストです。

mat.style.use(['ggplot']) 
fig = plt.figure(figsize=(20,15)); 

norm = mat.colors.Normalize(vmin=min(co), vmax=max(co)) 
mapper = cm.ScalarMappable(norm=norm, cmap=cm.RdBu) 
cc = list() 
    for v in co: 
cc.append(mapper.to_rgba(v)) 

ax = fig.add_subplot(111, projection='3d'); 
ax.scatter(xp, yp, zp, s=cp, c=cc, depthshade=True, linewidth=1, edgecolor='black'); 

mapper.set_array(cc) 
plt.colorbar(mapper, label='Count') 

y = lambda x: (np.tanh(-x*50.)+1.)*250 
x = np.arange(0,.05,.01) 

sizes = y(x) 
labels = x 

# I can't figure out what to do here: 
l = ax.legend(sizes, scatterpoints = len(sizes)) 

答えて

2

これを実行するための最良の方法は、凡例が作成されているダミーデータを追加することです。

sizes = np.arange(0, 300, 50) 
labels = ['size={0}'.format(s) for s in sizes] 

points = [ax.scatter([], [], [], s=s, c='gray') for s in sizes] 
plt.legend(points, labels, scatterpoints=1) 

これは、凡例を移植するために使用されているプロットにいくつかの空のアーティストオブジェクトを追加します。空のオブジェクトから色や透明度などを調整することができます。これは凡例に反映されます。

+0

これは私が探していたものです。ありがとう! – DNadler

関連する問題