2014-04-12 2 views
15

지금까지 서브 플로트에 레이블을 붙일 수 있었지만 주된 문제에 문제가 있습니다.주 플롯 범례 레이블 텍스트 변경

여기에 관련 내 코드의 일부 :

data_BS_P = data[channels[0]] 
data_BS_R = data[channels[1]] 
data_BS_Y = data[channels[2]] 
plot_BS_P = data_BS_P.plot() #data_BS_P is a pandas dataframe 
axBS = plot_BS_P.gca() 
axBS.plot(data_BS_R, label='Roll') 
axBS.plot(data_BS_Y, label='Yaw') 
axBS.set_ylabel('Amplitude (urad)') 
axBS.legend(loc='upper center', bbox_to_anchor=(0.5, 1.05), ncol=3, 
      fancybox=True, shadow=True) 
ml1 = MultipleLocator(10) 
ml2 = MultipleLocator(3600) 
axBS.yaxis.set_minor_locator(ml1) 
axBS.xaxis.set_minor_locator(ml2) 
plot_BS_P.save('L1-SUS-BS_M1_DAMP_PRY_INMON.jpg') 

그리고 이것은 내가 지금까지 무엇을 가지고 : 파란색 선에 대한 enter image description here 공지 긴 라벨을. 파일 이름 대신 "피치"라는 레이블을 붙이고 싶습니다. 어떤 라인에서 그렇게 할 수 있습니까?

+0

당신은이 문제를 해결하기에 충분한 코드를 게시하지 않았습니다. 파란색 선이 그려지는 곳에 코드를 게시하십시오. 문제가이 줄'plot_BS_P = data_BS_P.plot()'에 있다고 가정합니다. – ebarr

+0

@ebarr,'plot_BS_P = data_BS_P.plot()'그것을했습니다. 'data_BS_P'는 아마도'pandas'' DataFrame' 일 것입니다. 그것의 이름은 blot-in입니다. 맞습니까, O.P.? –

+0

파란 선을 그려주는 것은 data_BS_P.plot()입니다. 위의 줄은 data = TimeSeriesDict.fetch (channels, start, end, verbose = True)이고 나머지는 내가 다운로드해야하는 방대한 채널 목록입니다 ... –

답변

36

당신은, 간단한 예제 legend() 개체의 액세스 및 텍스트 값을 변경할 수 set_text()를 사용해야합니다 : 귀하의 경우

plt.plot(range(10), label='Some very long label') 
plt.plot(range(1,11), label='Short label') 
L=plt.legend() 
L.get_texts()[0].set_text('make it short') 
plt.savefig('temp.png') 

enter image description here

을, 당신은 첫 번째 항목을 변경 전설, 나는 0 색인에 L.get_texts()[0]의 색인도 귀하의 문제에 적용됩니다.

24

또 다른 방법 :

ax.legend(labels=mylabels) 
+3

이것은 내 사용을 위해 여기에 제시된 가장 쉬운 방법이었습니다 케이스. 고맙습니다. – KobeJohn