2010-04-17 5 views
39

matplotlib의 플롯 레이블 (예 : xlabel 또는 ylabel)에 줄 바꿈을 추가하려면 어떻게해야합니까? 예를 들어Python에서 TeX을 사용하여 matplotlib 레이블에 개행을 넣으시겠습니까?

plt.bar([1, 2], [4, 5]) 
plt.xlabel("My x label") 
plt.ylabel(r"My long label with $\Sigma_{C}$ math \n continues here") 

이상적으로 나는 y- 레이블이 가운데에 배치되기를 바랍니다. 이것을 할 수있는 방법이 있습니까? 레이블에는 TeX ('$'로 묶음)와 개행 문자가 모두 있어야합니다.

답변

21

귀하의 예는 정확하게 완료된 방법이며 \n을 사용합니다. 당신은 너무 파이썬 당신은 두 세계의 최고를 가질 수

+6

LaTeX 명령을 적극적으로 두 번 이스케이프하여 Python이 해석하지 않도록 할 수 있습니다.'xlabel ('$ \\ Sigma $') –

+4

이 대답은 정확하지 않습니다. 정상적인 문자열 (no r)에서 라텍스'\'를 두 번 이스케이프하거나 @EOLs [answer] (http://stackoverflow.com/a/2666270/1157089) – aaren

+1

을 중심으로 두 번 이스케이프 처리합니다.'ylabel ('this is vertical \ ntest', multialignment = 'center')'http://matplotlib.org/examples/pylab_examples/multiline.html – Faber

58

원시 문자열로 취급하지 않습니다 불구하고 R 접두사를 이륙해야합니다

plt.ylabel(r"My long label with unescaped {\LaTeX} $\Sigma_{C}$ math" 
      "\n" # Newline: the backslash is interpreted as usual 
      r"continues here with $\pi$") 
: 라텍스 줄 바꿈 명령의 자동 "탈출"

(세 줄을 사용하는 대신 한 줄로 문자열을 구분하는 것이 다른 옵션입니다).

실제로 파이썬은 서로 이어지는 문자열 리터럴을 자동으로 연결하며 원시 문자열 (r"…")과 문자열 보간 ("\n")을 혼합 할 수 있습니다.

+0

빠른 주석 - 이것은 라벨을 붙이는 쉬운 방법을위한 완벽한 해결책이었습니다 (a), (b) 등으로 레이블을 그린다면 xlabel의 중앙에 레이블이 있어야합니다. 이렇게하면 plt.tight_layout()도 전체 레이블을보고 이에 따라 조정됩니다. – SeanM

2

다음하기 matplotlib 파이썬 스크립트는

ax.text(10, 70, 'shock size \n $n-n_{fd}$') 

새로운 라인이없는 다음의 새로운 라인과 텍스트를 생성합니다. 텍스트

ax.text(10, 70, r'shock size \n $n-n_{fd}$') 
7
plt.bar([1, 2], [4, 5]) 
plt.xlabel("My x label") 
plt.ylabel(r"My long label with $\Sigma_{C}$ math" + "\n" + "continues here") 

전에 연구를 주목하는 것은 바로 원시 문자열 형식에없는 줄 바꿈을 가진 문자열을 연결.