34

我正在尝试在我的情节中添加一些文本,即 RTL(在本例中为希伯来语)。经过一些工作设法让它显示文本,但它显示的是 LTR(意思是,以反向顺序)。我已经深入研究了参考并在网上进行了广泛的搜索,但没有任何结果。

我正在使用的示例:

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

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

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

每一个帮助将不胜感激。

4

6 回答 6

55

对于阿拉伯语bidi.algorithm.get_display,您需要两个arabic_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 阿拉伯语文本

于 2014-12-30T09:28:48.747 回答
30

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

bidi 包提供了这个功能,所以使用:

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 中使用的乳胶表达式。所以要小心使用。

于 2013-03-16T12:16:02.477 回答
3

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

import arabic_reshaper
from bidi.algorithm import get_display

new_text=get_display(arabic_reshaper.reshape(old_text))

因为只有arabic_reshaper没有重新排列字母,而bidi没有组合它们

^_^

于 2019-11-28T17:51:12.900 回答
0

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

于 2020-06-09T16:27:36.273 回答
-1

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

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

于 2020-08-24T16:42:15.437 回答
-3

改用牵牛星。它立即与阿拉伯语/波斯语文本兼容。无需改变任何东西!https://altair-viz.github.io/index.html

于 2019-12-29T21:12:24.697 回答