Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matplotlib: Writing right-to-left text (Hebrew, Arabic, etc.)

I'm trying to add some text to my plot which is RTL (in this case, Hebrew). After some work managed to get it to display the text, but it's displayed LTR (meaning, in the reverese order). I've dug into the reference and did extensive search online and nothing came up.

An example for what I'm using:

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

and it displays 'א התיכ םלוש'. In case you can't see the Hebrew, it's as if i'd input 'Hello', and the output would be 'olleH'.

I can't simply reverse the input since it's mixed LTR and RTL.

Every help would be appreciated.

like image 346
Korem Avatar asked Mar 14 '13 22:03

Korem


2 Answers

For Arabic you need both bidi.algorithm.get_display and arabic_reshaper modules:

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 arabic text

like image 131
Nasser Al-Wohaibi Avatar answered Sep 16 '22 21:09

Nasser Al-Wohaibi


For whoever encounters the same problem, I found a partial solution.

The bidi package provides this functionality, so using:

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

displays it correctly.

So why is it partial? Because I found out that the bidi package sometimes messes up latex expression which I use with matplotlib. So use it carefully.

like image 37
Korem Avatar answered Sep 18 '22 21:09

Korem