如何在matplotlib和networkx中显示非英文字体?

时间:2018-03-29 18:34:51

标签: python matplotlib fonts networkx

这是question的后续问题。由于它解决了一个更普遍的问题,我将其作为一个新问题。

我有一个网络,节点的标签是波斯语(阿拉伯字母)。当我尝试使用networkx显示我的网络时,它会显示空白方块而不是阿拉伯字母。下面我复制了here中答案中提供的一个很好的例子。

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

我尝试通过python中的命令行安装所需的字体,但我得到同样的东西。

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

这是ERROR消息,更具体一点:

/usr/local/anaconda3/lib/python3.5/site-packages/matplotlib/font_manager.py:1288: UserWarning: findfont: Font family ['TraditionalArabic'] not found. Falling back to Bitstream Vera Sans
  (prop.get_family(), self.defaultFamily[fontext])

我正在研究如何在ubuntu cli中安装所需字体的方法,如果可能的话,将它放在我的docker文件中,因为它每次旋转运行时都会安装。

最好的问候,s。

0 个答案:

没有答案