Matplotlib: escribir texto de derecha a izquierda (hebreo, árabe, etc.)

Estoy tratando de agregar texto a mi gráfico, que es RTL (en este caso, hebreo). Después de algún trabajo, logré que se muestre el texto, pero se visualiza LTR (es decir, en el orden de reverencia). Busqué en la referencia e hice una búsqueda extensa en línea y no surgió nada.

Un ejemplo de lo que estoy usando:

import matplotlib.pyplot as plt plt.text(0.5, 0.5, u'שלום כיתה א', name = 'Arial') plt.show() 

y muestra ‘א התיכ םלוש’. En caso de que no puedas ver el hebreo, es como si ingresara ‘Hola’, y la salida sería ‘olleH’.

No puedo simplemente revertir la entrada ya que es una mezcla de LTR y RTL.

Toda ayuda sería apreciada.

Para el árabe , necesitas los módulos bidi.algorithm.get_display y arabic_reshaper :

 from bidi.algorithm import get_display import matplotlib.pyplot as plt import arabic_reshaper reshaped_text = arabic_reshaper.reshape(u'لغةٌ عربيّة') artext = get_display(reshaped_text) plt.text(0.25, 0.45, artext , name = 'Times New Roman',fontsize=50) plt.show() 

python matplotlib texto arabe

Para quienquiera que encuentre el mismo problema, encontré una solución parcial.

El paquete bidi proporciona esta funcionalidad, por lo que utiliza:

 from bidi import algorithm as bidialg import matplotlib.pyplot as plt text = bidialg.get_display(u'שלום כיתה א') plt.text(0.5, 0.5, text , name = 'Arial') plt.show() 

lo muestra correctamente.

Entonces, ¿por qué es parcial? Porque descubrí que el paquete bidi a veces desordena la expresión de látex que uso con matplotlib. Así que úsalo con cuidado.