2013-03-14 11 views
9

Ich versuche, einen Text zu meinem Grundstück hinzuzufügen, das RTL ist (in diesem Fall, Hebräisch). Nach einiger Arbeit hat es geschafft, dass es den Text anzeigt, aber es wird LTR angezeigt (also in der Reihenfolge der Reverenz). Ich habe mich in die Referenz vertieft und umfangreiche Online-Recherchen durchgeführt.Matplotlib: Schreiben von rechts nach links Text (Hebräisch, Arabisch, etc.)

Ein Beispiel für das, was ich verwende:

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

und es zeigt 'א התיכ םלוש'. Falls Sie das Hebräische nicht sehen können, ist es so, als würde ich 'Hallo' eingeben, und die Ausgabe wäre 'olleH'.

ich die Eingabe nicht einfach rückgängig machen kann, da es gemischten LTR und RTL ist.

Jede Hilfe wäre willkommen.

+0

Sie haben RTL und LTR 'Worte' getrennt? Dann könnten Sie die RTLs umgekehrt haben, bevor Sie sie alle zusammenfügen. –

+0

Haben Sie die expliziten Unicode-Direction-Zeichen in der Zeichenfolge? – tacaswell

+0

@Zhenya - nein, kann ich nicht. Sie werden meinem Code zur Verfügung gestellt und nicht von ihm zusammengestellt. – Korem

Antwort

12

Für wen auch immer das gleiche Problem auftritt, fand ich eine Teillösung.

The bidi package stellt diese Funktionalität zu verwenden, da:

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

zeigt es richtig.

Also warum ist es teilweise? Weil ich herausgefunden habe, dass das Bidipaket manchmal den Latexausdruck durcheinander bringt, den ich mit Matplotlib verwende. Also benutze es vorsichtig.

10

Für Arabisch Sie benötigen beide bidi.algorithm.get_display und arabic_reshaper Module:

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

Verwandte Themen