7

Linux Fedora 19 KDE、64ビットで実行されているpython33 networkxおよびmatplotlibを使用して辞書式グラフを描画しようとしました。入力データとして英語のスクリプトを入力すると、グラフがうまく描画されます。ただし、入力データとしてアラビア語のスクリプトを提供すると、並置された正方形しか得られません。これは、英語のスクリプトによる単純なグラフの例です。

英語の文字で書かれたアラビア語の単語

これは、アラビア文字で書かれたアラビア語の単語の簡単なグラフです (右から左に書かれています)。

アラビア文字で書かれたアラビア語の単語

問題は、python networkx と matplotlib.pyplot を使用して生成したグラフにアラビア語のスクリプトを表示するにはどうすればよいかということです。あなたの親切な助けに本当に感謝します!

編集: Chronial が適切なフォントの選択を提案した後、python33 シェルで次のコマンドを実行しました。

>>> 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 に答える