2016-04-18 141 views
1

我創建了一個同時使用顏色和標記尺寸以及獨立尺寸的3D散點圖。我添加了一個colorbar圖例,但無法弄清楚如何爲標記大小創建圖例。如何使用matplotlib爲3D散點圖創建標記圖例?

目前,劇情是這樣的:

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