Python Matplotlib:从右向左书写文本(希伯来语、阿拉伯语等)

Python Matplotlib:从右向左书写文本(希伯来语、阿拉伯语等),python,matplotlib,hebrew,right-to-left,Python,Matplotlib,Hebrew,Right To Left,我试图在我的情节中添加一些文本,即RTL(在本例中为希伯来语)。经过一些工作后,它设法让它显示文本,但它显示为LTR(意思是,以混响顺序)。我深入研究了参考资料,在网上进行了广泛的搜索,但什么也没找到 我正在使用的示例如下: import matplotlib.pyplot as plt plt.text(0.5, 0.5, u'שלום כיתה א', name = 'Arial') plt.show() 并显示“אהתכם㪡ש”。 如果你看不到希伯来语,就好像我输入了“Hello”,输出

我试图在我的情节中添加一些文本,即RTL(在本例中为希伯来语)。经过一些工作后,它设法让它显示文本,但它显示为LTR(意思是,以混响顺序)。我深入研究了参考资料,在网上进行了广泛的搜索,但什么也没找到

我正在使用的示例如下:

import matplotlib.pyplot as plt
plt.text(0.5, 0.5, u'שלום כיתה א', name = 'Arial')
plt.show()
并显示“אהתכם㪡ש”。 如果你看不到希伯来语,就好像我输入了“Hello”,输出的是“olleH”

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


感谢您的帮助。

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

提供了此功能,因此使用:

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()
正确显示它

那么为什么它是局部的呢?
因为我发现bidi包有时会弄乱我与matplotlib一起使用的latex表达式。所以请小心使用。

对于阿拉伯语您需要
bidi.algorithm.get\u display
和模块:


我有同样的问题,我认为使用@Korem和@Nasser Al-Wohaibi的两个答案:

import arabic_reshaper
from bidi.algorithm import get_display

new_text=get_display(arabic_reshaper.reshape(old_text))
因为只有阿拉伯文的“重塑者”没有重新排列字母,而bidi只是没有将它们组合起来


^_^

改用牵牛星。它与阿拉伯语/波斯语文本完全兼容。不需要改变任何东西

我知道我的答案不是这个问题的解决方案,而是用matplotlib代替matplotlib解决了我的问题。它正确显示波斯语单词。

您可以尝试通过以下方式翻转文本:

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

您可以分别使用RTL和LTR“单词”吗?那么你就可以在将它们全部连接在一起之前反转RTL字符了。字符串中有明确的unicode方向字符吗?@Zhenya-不,我没有。它们是提供给我的代码的,而不是由它组装的。@tcaswell-我不知道如何检查。但是如果我使用python的print,字符串会正确显示,所以我猜它们在那里。你能解释一下,你是怎么在图表中写希伯来语的吗?嗨,当我尝试此操作时,所有非英语字母都显示为空白方块,并生成以下错误消息:
/usr/local/anaconda3/lib/python3.5/site packages/matplotlib/font_manager.py:1288:UserWarning:findfont:font-family['Arial']未找到。回到Bitstream Vera Sans(prop.get_family(),self.defaultFamily[fontex])
我似乎需要安装新字体,但我所有的尝试都失败了。你有什么建议吗?
import matplotlib.pyplot as plt
plt.text(0.5, 0.5, (u'שלום כיתה א')[::-1], name = 'Arial')
plt.show()