2013-03-14 183 views
9

我试图添加一些文本到我的情节是RTL(在这种情况下,希伯来语)。在一些工作设法让它显示文本之后,它显示了LTR(意思是,按照顺序排列)。我已经挖掘了参考资料,并在网上进行了广泛的搜索,没有出现。Matplotlib:编写从右到左的文本(希伯来语,阿拉伯语等)

一个例子,我使用的是什么:

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

并显示 'אהתיכםלוש'。 如果你看不到希伯来语,就好像我输入'你好',输出将是'olleH'。

我不能简单地反转输入,因为它是混合LTR和RTL。

每一个帮助将不胜感激。

+0

你可以有RTL和LTR '字' 分开?那么你可以在将它们全部连接在一起之前将RTL转换为 – 2013-03-14 23:24:21

+0

在字符串中是否有明确的unicode方向字符? – tacaswell 2013-03-15 03:06:39

+0

@振亚 - 不,我不能。它们提供给我的代码,而不是由它组装。 – Korem 2013-03-16 12:10:23

回答

12

对于遇到同样问题的人,我找到了部分解决方案。

bidi package提供了此功能,因此,使用:正确

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

显示它。

那么,它为什么是部分? 因为我发现双向包装有时会混淆与matplotlib一起使用的乳胶表达。所以仔细使用它。

10

对于阿拉伯语你既需要bidi.algorithm.get_displayarabic_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 arabic text