繁体   English   中英

使用Python中的networkX用表情符号替换节点标签

[英]Substitute node labels with emoji using networkX in Python

我正在使用networkX从距离矩阵(emoji_sim,DataFrame)绘制网络图。 这是代码:

G = nx.from_numpy_matrix(np.array(emoji_sim))
nx.draw(G, edge_color='silver', node_color='lightsalmon', with_labels=True)
plt.show()

我知道有一种方法可以将节点重新标记为:

G = nx.relabel_nodes(G, dict(zip(range(len(G.nodes())), range(1, len(G.nodes())+1))))   

但我想用节点标签替换图像(可能从文件中读取或使用Python表情符号包)。 有没有办法做到这一点? 非常感谢!

为了澄清,我试图用图像替换实际的圆圈。

它背后的想法不是很难,但为了让它显示(至​​少在ubunto上)它给了我一些困难,因为并非所有字体都支持表情符号。 我将展示直接的方式然后一些帮助我的链接(也许你不需要那些)。

从emoji python包中表情符号备忘单中 ,我选择了三个作为示例显示,这里是代码。

G = nx.Graph()
G.add_nodes_from([0,1,2])
n0 = emoji.emojize(':thumbsup:',use_aliases=True)
n1 = emoji.emojize(':sob:',use_aliases=True)
n2 = emoji.emojize(':joy:',use_aliases=True)
labels ={0:n0,1:n1,2:n2}
nx.draw_networkx(G,labels=labels, node_color = 'w', linewidths=0, with_labels=True, font_family = 'Symbola' ,font_size = 35)    
plt.show()

在此输入图像描述

遇到的困难:

1-我的机器在ubunto 14.04上,我无法显示任何表情符号,它们总是显示为矩形

使用以下命令安装所需的字体Symbola (此处提到)

sudo apt-get install ttf-ancient-fonts

2- Maplotlib(networkx调用绘图)未使用已安装的字体。

从几个有用的讨论1 2 3 4 5 6我在默认的matplotib目录中复制并粘贴了Symbola的.tff字体文件(它获取要使用的字体)。

cp /usr/share/fonts/truetype/ttf-ancient-scripts/Symbola605.ttf /usr/share/matplotlib/mpl-data/fonts/ttf

然后我不得不删除fontList.cache文件以获取要加载的新字体。

rm ~/.cache/matplotlib/fontList.cache

注意

您可以通过更改draw_networkx的输入来拥有不同的视图,例如,不发送linewidths将为每个节点显示圆形边框,如果您想要节点的特定背景颜色,请将color_node从白色更改为您想要的颜色...更多细节请查看文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM