Python: salto de línea de anotaciones de matplotlib (con y sin látex)

Tengo una pregunta muy básica: cómo hacer un salto de línea con matplotlib en python con un comando “anotar”. Intenté “\” y “\ n” pero no funciona. ¿Y cómo hacer esto para una anotación de “látex” y para una anotación de texto normal?

Muchas gracias.

¿Qué intentaste exactamente?

¿Estuviste, por casualidad, usando una cadena en bruto (por ejemplo, r"whatever" )?

'\n' funciona a la perfección, pero si estás utilizando una cadena en bruto para evitar que las secuencias de látex se interpreten como un escape, python interpretará que '\' y 'n' lugar de una nueva línea.

Como ejemplo:

 import matplotlib.pyplot as plt plt.annotate('Testing\nThis\nOut', xy=(0.5, 0.5)) plt.show() 

introduzca la descripción de la imagen aquí

Por otro lado, si usamos una cadena en bruto:

 import matplotlib.pyplot as plt plt.annotate(r'Testing\nThis\nOut', xy=(0.5, 0.5)) plt.show() 

introduzca la descripción de la imagen aquí

Sin embargo, si necesita ambos, considere el siguiente ejemplo:

 import matplotlib.pyplot as plt a = 1.23 b = 4.56 annotation_string = r"Need 1$^\mathsf{st}$ value here = %.2f" % (a) annotation_string += "\n" annotation_string += r"Need 2$^\mathsf{nd}$ value here = %.2f" % (b) plt.annotate(annotation_string, xy=(0.5, 0.5)) plt.show() 

Lo que te da:

introduzca la descripción de la imagen aquí

La clave es ensamblar la cadena de antemano, utilizando += . De esa manera, puede tener los comandos de cadena sin formato (indicados por r ) y el salto de línea ( \n ) en la misma anotación.

Puede usar las comillas triples cuando defina la cadena de anotación, como en string="""some text""" , de modo que los saltos de línea reales que escriba en su cadena se interpretarán como saltos de línea en la salida. Aquí hay un ejemplo, que incluye látex y la impresión de algunos parámetros numéricos de otras partes de su código

 import matplotlib.pyplot as plt I = 100 T = 20 annotation_string = r"""The function plotted is: $f(x) \ = \ \frac{{I}}{{2}} \cos\left(2 \pi \ \frac{{x}}{{T}}\right)$ where: $I = ${0} $T = ${1}""".format(I, T) plt.annotate(annotation_string, xy=(0.05, 0.60), xycoords='axes fraction', backgroundcolor='w', fontsize=14) plt.show() 

He añadido algunos “extras”:

  • La r poco antes de la apertura de las comillas triples, para facilitar el intérprete de LaTeX.

  • los corchetes dobles {{}} , para que el .format() y el LaTeX no se mezclen entre sí

  • La xycoords='axes fraction' , para especificar la posición de la cadena con valores fraccionarios con respecto al ancho y la altura del trazado
  • backgroundcolor='w' opción backgroundcolor='w' , que pone un marco blanco alrededor de la anotación (conveniente en caso de superposición con su gráfico)

La ttwig obtenida es esta: introduzca la descripción de la imagen aquí

Soluciones rapidas

plt.annotate("I am \n"+r"$\frac{1}{2}$"+"\n in latex math environment", xy=(0.5, 0.5))