2013-03-14 13 views
9

Sto cercando di aggiungere del testo alla mia trama che è RTL (in questo caso, ebraico). Dopo un po 'di lavoro è riuscito a farlo visualizzare il testo, ma è visualizzato LTR (che significa, nell'ordine riverente). Ho scavato nella referenza e ho fatto ricerche approfondite online e non è venuto fuori nulla.Matlota: scrittura di testo da destra a sinistra (ebraico, arabo, ecc.)

Un esempio per quello che sto usando:

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

e visualizza 'א התיכ םלוש'. Nel caso in cui non si riesca a vedere l'ebraico, è come se inserissi "Ciao" e l'output sarebbe "olleH".

Non è possibile invertire semplicemente l'input poiché è misto LTR e RTL.

Ogni aiuto sarebbe apprezzato.

+0

si può avere RTL e LTR 'parole' separatamente? Quindi potresti rovesciare quelli di RTL appena prima di unirli tutti insieme –

+0

hai i caratteri di direzione unicode espliciti nella stringa? – tacaswell

+0

@ Zhenya - no, non posso. Sono forniti al mio codice e non assemblati da esso. – Korem

risposta

12

Per chi incontra lo stesso problema, ho trovato una soluzione parziale.

Il bidi package fornisce questa funzionalità, in modo da utilizzare:

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

visualizzata correttamente.

Quindi perché è parziale? Perché ho scoperto che il pacchetto bidi a volte scombina l'espressione di lattice che uso con matplotlib. Quindi usalo con attenzione.

10

Per arabo è necessario sia bidi.algorithm.get_display e arabic_reshaper moduli:

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

Problemi correlati