Right-to-left Support in Python Networkx and matplotlib
Question: I have tried to draw lexicographic graphs with python33 networkx and
matplotlib running on Linux Fedora 19 KDE, 64 bits. When feeding English
script as input data, the graphs are drawn well. However, when providing
Arabic script as input data, all I get is squares queued in juxtaposition.
This is an example of a simple graph in English script:

![Arabic words written with English
letters](http://i.stack.imgur.com/WfQY4.png)

and here is a simple graph of Arabic words written in Arabic script, (which is
written from Right-to-left).

![Arabic words written in Arabic letters](http://i.stack.imgur.com/7JOUA.png)

The question is: how can I show Arabic script in the graphs that I generate
using python networkx and matplotlib.pyplot? I really appreciate your kind
help!

Edit: after Chronial suggested selecting the the proper font, I executed these
commands in the python33 shell:

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

Then I constructed the graph with Arabic words. However, drawing the graph did
not show Arabic script. It showed jsut squares. I do not know whether the
matplotlib.pyplot uses the system fonts or it has its own font packages.
Assuming that the matplotlib.pyplot uses the system font, then it should have
shown Arabic scripts. It seems that Arabic fonts needs to be installed to the
matplotlib.pyplot. But I don't know how to do that. Your help is highly
appreciated!

Edit # 3: After installing Arabic fonts into the system, I could generate
graphs with Arabic script but the script appears from left-to-right. A good
progress towards the final stage: which is Arabic script appearing from Right
to left. Below is a shot of the graph:

![Arabic script, but appearing from Left to right instead of Right-to-
left](http://i.stack.imgur.com/Rxf5O.png)

Yours,

Mohammed


Answer: For **Arabic** in matplotlib you need `bidi.algorithm.get_display` and
[`arabic_reshaper`](https://github.com/mpcabd/python-arabic-reshaper) modules:

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

![enter image description here](http://i.stack.imgur.com/Rmvwk.png)

