2017-12-28 39 views
0

내 Matplotlib v. 2.0.2 그림의 전설을 Python 2.7에 표시 할 수 없습니다. for 루프에서 축에 화살표를 그리는 최소 예제가 있습니다.Matplotlib 범례가 표시되지 않습니다. for 루프에 정의 된 ax.arrow()의 레이블. Python 2.7

모든 반복에서 범례를 표시하는 데 작동하지 않는 label 키워드 정의를 할당 했으므로 조건부를 사용하여 첫 번째 반복에만 레이블을 설정하려고합니다.

ax.legend()에서 "bbox_to_anchor"및 "loc"인수를 사용해도 아무 효과가 없으므로 범례 인수를 생략합니다.

누구나 레이블 옆에 빨간색 화살표와 검은 색 화살표 아이콘이있는 "Arrow1"과 "Arrow2"레이블을 나타내는 범례를 만드는 방법에 대한 아이디어가 있습니까?

최소한의 예 :

arrow plot

편집 :

그것은 라벨 정의마다 반복 설정 보인다

import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 
ax.set_xlim(0, 11) 
ax.set_ylim(0, 2) 

kwargs1 ={'color':'r'} 
kwargs2 ={'color':'black'} 

for i in range(1, 11): 

    ax.arrow(i-0.2, 0, 0, i/10., width=0.1, 
       label='Arrow1' if i == 1 else None, **kwargs1) 

    ax.arrow(i+0.2, 0, 0, i/10., width=0.1, 
       label='Arrow2' if i == 1 else None, **kwargs2) 

ax.legend() 

없이 전설로 출력 플롯의 사진에 대한 링크를 참조하십시오 OK입니다. 여기에 전설의 정확한 색상과 라벨 라인 마커를 표시하는 솔루션이다 :

arrow plot with legend

또 다른 편집 :

에 대한 전설과 플롯 출력의

import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 
ax.set_xlim(0, 11) 
ax.set_ylim(0, 2) 

kwargs1 ={'color':'r' } 
kwargs2 ={'color':'black'} 

for i in range(1, 11): 

    Arrow1 = ax.arrow(i-0.2, 0, 0, i/10., width=0.1, 
       label='Arrow1', **kwargs1) 

    Arrow2 = ax.arrow(i+0.2, 0, 0, i/10., width=0.1, 
       label='Arrow2', **kwargs2) 

ax.legend(handles=[Arrow1, Arrow2]) 

사진 내가 밑으로 갈 것이라고 생각하지 않는 이유, 최소한의 예제가 아닌 실제 스크립트의 복잡성은 전설에 레이블을 추가하기 위해 보이지 않는 "프록시 아티스트"가 필요했습니다. 이것은 here

import matplotlib.pyplot as plt 
from matplotlib.patches import Rectangle 

fig, ax = plt.subplots() 
ax.set_xlim(0, 11) 
ax.set_ylim(0, 2) 

kwargs1 ={'color':'red' } 
kwargs2 ={'color':'black'} 

for i in range(1, 11): 

    ax.arrow(i-0.2, 0, 0, i/10., width=0.1, **kwargs1) 
    Arrow1 = Rectangle((0, 0), 1, 1, label='Arrow1', fc='red') 

    ax.arrow(i+0.2, 0, 0, i/10., width=0.1, **kwargs2) 
    Arrow2 = Rectangle((0, 0), 1, 1, label='Arrow2', fc='black') 

ax.legend(handles=[Arrow1, Arrow2], loc='upper left') 
+0

matplotlib에서 핸들과 라벨을 혼합하면 냄새가 난다. Arrow1과 Arrow2로 라벨을 지정하고 ax.legend (loc = '오른쪽 상단')를 호출하면 예상 한대로 처리해야한다. –

답변

0

내가 그것을

https://matplotlib.org/users/legend_guide.html

을 보여주기 위해 당신이 얻을 수있는 '라벨'과 전설() 명령의 '핸들'인수를 지정할 필요가 있다고 생각, 지원되지 않는 아티스트를위한이 문서에서 제안되었다
+0

그거 고마워! 내 게시물을 편집하여 솔루션을 반영합니다. – AF2k15