2010-04-17 14 views
39

¿Cómo puedo agregar una nueva línea a la etiqueta de un trazado (por ejemplo, xlabel o ylabel) en matplotlib? Por ejemplo,Poniendo newline en la etiqueta matplotlib con TeX en Python?

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

Idealmente, me gustaría que la etiqueta y esté centrada también. ¿Hay alguna forma de hacer esto? Es importante que la etiqueta tenga tanto TeX (incluido en '$') como la nueva línea.

Respuesta

21

Su ejemplo es exactamente cómo se hace, usted usa \n. Es necesario quitarse la r prefijo, aunque por lo pitón no lo trata como una cadena de texto en

+6

Es posible que desee duplicar proactivamente los comandos LaTeX para asegurarse de que no sean interpretados por Python: 'xlabel ('$ \\ Sigma $')' –

+4

Esta respuesta no es correcta. Usted * cualquiera * escape doble del latex '\' en una cadena normal (no r) * o * sigue @EOLs [respuesta] (http://stackoverflow.com/a/2666270/1157089) – aaren

+1

con respecto al centrado: 'ylabel ('this is vertical \ ntest', multialignment = 'center') 'de http://matplotlib.org/examples/pylab_examples/multiline.html – Faber

58

Puede tener lo mejor de ambos mundos: automático "escapar" de LaTeX comandos y saltos de línea:

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$") 

(en lugar de utilizar tres líneas, separar las cadenas por espacios individuales es otra opción).

De hecho, Python concatena automáticamente literales de cadenas que se suceden entre sí, y puede mezclar cadenas sin formato (r"…") y cadenas con interpolación de caracteres ("\n").

+0

Solo un comentario rápido: esta fue la solución perfecta para una forma fácil de etiquetar subparcelas con un (a), (b), etc. cuando esa etiqueta debe estar debajo de la gráfica y centrada con la xlabel. De esta forma, plt.tight_layout() también ve toda la etiqueta y se ajusta en consecuencia. – SeanM

2

La siguiente secuencia de comandos Python matplotlib crea texto con la nueva línea

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

La siguiente no tiene nueva línea. Note la r antes del texto

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") 

Sólo concatenar las cadenas con un salto de línea que no está en forma de cadena prima.

Cuestiones relacionadas