2011-11-05 2 views
0

이 옵션은 작동하지 않습니다 ...scatter()에 범례를 추가하는 방법은 무엇입니까?

import numpy as np 
import matplotlib.pyplot as plt 

arr = np.random.random((5,3)) 

ax = plt.axes() 
ax.scatter(arr[:,0],arr[:,1],c=['k','r','g','r','b']) 
plt.legend(loc='upper left') 
plt.draw() 

ax = plt.axes() 
h = ax.scatter(arr[:,0],arr[:,1],c=['k','r','g','r','b']) 
plt.legend(h, loc='upper left') 
plt.draw() 
내가 대신 사용 플롯을 조립하고 루프를 쓸 수

,

colors = ['k','r','g','r','b'] 
ax = plt.axes() 
h = [] 
for i,c in enumerate(colors): 
    h.append(ax.plot(arr[i,0],arr[i,1],c+'o')) 
plt.legend(colors) ## plt.legend(h,colors) does not work 
plt.draw() 

을 내가 legendh를 전달하면, 그것은

warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),)) 
을 말한다

하지만 루프를 작성하지 않고 분산 형으로이 작업을 수행하려면 어떻게해야합니까?

답변

1

범례에 실제 산란 플롯을 채우거나 산란 플롯에서 어떤 일이 일어나는지를 참조하는 것처럼 보입니다. 범례를 만들려면 별도의 엔티티로 그릴 필요가 있습니다. 즉, 스 캐터 지점 모양과 색상을 다시 작성해야 할 필요가 있음을 의미합니다 (예 : 서브 플롯). 약간 수동 방식이지만 작동해야합니다.

colors = ['k','r','g','r','b'] 
ax = plt.axes() 
ax.scatter(arr[:,0],arr[:,1],c=['k','r','g','r','b']) 
line1 = plt.Line2D(range(10), range(10), marker='o', color=colors[0]) 
line2 = plt.Line2D(range(10), range(10), marker='o',color=colors[1]) 
line3 = plt.Line2D(range(10), range(10), marker='o',color=colors[2]) 
line4 = plt.Line2D(range(10), range(10), marker='o',color=colors[3]) 
line5 = plt.Line2D(range(10), range(10), marker='o',color=colors[4]) 
plt.legend((line1,line2,line3, line4, line5),('color1','color2', 'color3', 'color4', 'color5'),numpoints=1, loc=1) 
plt.show() 
+0

감사합니다. 내 대안은 수동으로 범례를 작성하는 방법이었습니다. 이거 야. – hatmatrix

관련 문제