2013-03-14 7 views
9

Próbuję dodać tekst do mojego spisku, który jest RTL (w tym przypadku hebrajskim). Po niektórych pracach udało się go wyświetlić tekst, ale wyświetlany jest LTR (co oznacza, w kolejności reverese). Pogrzebałem w referencji i przeprowadziłem obszerne wyszukiwanie w Internecie i nic nie wyszło.Matplotlib: Pisanie tekstu pisanego od prawej do lewej (hebrajski, arabski, itp.)

Przykładem czego używam:

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

i wyświetla 'א התיכ םלוש'. Jeśli nie widzisz hebrajskiego, to tak, jakbym wprowadził "Witaj", a wynik będzie "olleH".

Nie mogę po prostu odwrócić wejścia, ponieważ jest mieszany LTR i RTL.

Każda pomoc zostanie doceniona.

+0

można mieć RTL i LTR 'słowa' osobno? Wtedy mógłbyś odwrócić te RTL tuż przed tym, jak 'join'ing one all together –

+0

masz wyraźne znaki kierunku Unicode w ciągu znaków? – tacaswell

+0

@Zhenya - nie, nie mogę. Są one dostarczane do mojego kodu i nie są przez nie montowane. – Korem

Odpowiedz

12

Dla każdego, kto napotyka ten sam problem, znalazłem częściowe rozwiązanie.

The bidi package zapewnia tej funkcji, więc przy użyciu:

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

wyświetla go poprawnie.

Dlaczego więc jest częściowy? Ponieważ dowiedziałem się, że pakiet bidi czasami miesza się z ekspresją lateksu, której używam z matplotlib. Więc używaj go ostrożnie.

10

Dla arabskiej trzeba zarówno bidi.algorithm.get_display i arabic_reshaper moduły:

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

Powiązane problemy