7

我尝试使用在 Linux Fedora 19 KDE,64 位上运行的 python33 networkx 和 matplotlib 绘制字典图。当输入英文脚本作为输入数据时,图形绘制得很好。但是,当提供阿拉伯语脚本作为输入数据时,我得到的只是并列排列的正方形。这是英文脚本中的简单图形示例:

用英文字母写的阿拉伯语单词

这是一个用阿拉伯文字书写的简单阿拉伯文字图表(从右到左书写)。

用阿拉伯字母写的阿拉伯单词

问题是:如何在使用 python networkx 和 matplotlib.pyplot 生成的图表中显示阿拉伯语脚本?我真的很感谢你的帮助!

编辑:在 Chronial 建议选择正确的字体后,我在 python33 shell 中执行了这些命令:

>>> import matplotlib.pyplot
>>> matplotlib.rcParams.update({font.family' : 'TraditionalArabic'})

然后我用阿拉伯语单词构建了图表。但是,绘制图表并没有显示阿拉伯文字。它显示了 jsut 方块。我不知道 matplotlib.pyplot 是使用系统字体还是有自己的字体包。假设 matplotlib.pyplot 使用系统字体,那么它应该显示阿拉伯语脚本。似乎需要将阿拉伯字体安装到 matplotlib.pyplot 中。但我不知道该怎么做。非常感谢您的帮助!

编辑#3:在系统中安装阿拉伯字体后,我可以使用阿拉伯文字生成图形,但该脚本从左到右显示。最后阶段取得了良好进展:从右到左出现的阿拉伯文字。下面是图表的截图:

阿拉伯文字,但从左到右而不是从右到左出现

你的,

穆罕默德

4

1 回答 1

5

对于matplotlib 中的阿拉伯语bidi.algorithm.get_display,您需要和arabic_reshaper模块:

from bidi.algorithm import get_display
import matplotlib.pyplot as plt
import arabic_reshaper
import networkx as nx

# Arabic text preprocessing 
reshaped_text = arabic_reshaper.reshape(u'لغةٌ عربيّة')
artext = get_display(reshaped_text)

# constructing the sample graph
G=nx.Graph()
G.add_edge('a', artext ,weight=0.6)
pos=nx.spring_layout(G) 
nx.draw_networkx_nodes(G,pos,node_size=700)
nx.draw_networkx_edges(G,pos,edgelist=G.edges(data=True),width=6)

# Drawing Arabic text
# Just Make sure your version of the font 'Times New Roman' has Arabic in it. 
# You can use any Arabic font here.
nx.draw_networkx_labels(G,pos,font_size=20,font_family='Times New Roman')

# showing the graph
plt.axis('off')
plt.show()

在此处输入图像描述

于 2014-12-30T09:49:20.693 回答