温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - How to display image icons on nodes in NetworkX
python python-3.x networkx

python - 如何在NetworkX中的节点上显示图像图标

发布于 2020-03-27 12:00:04

我正在使用NetworkX模块来介绍基础结构系统的网络。在此系统中,节点和边由不同类型的实体组成,我想使用一些表示其类型的图标代替圆形,星形或正方形。

G = nx.Graph()
G.add_edge('a', 'b')
nx.draw(G, labels={'a':'img1', 'b':'img2'}, with_labels=True)
plt.show()

显然,我的脚本创建了一个带有“ img1”和“ img2”标签的图形。我正在寻找一种显示两个图标而不是实心圆和标签的方法。

查看更多

查看更多

提问者
a_g
被浏览
62
Joe 2019-07-04 01:07

您可以使用networkx创建图并获取图的句柄。然后使用matplotlib在其顶部绘图。

import networkx as nx
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import glob
from numpy import sqrt
import glob

path = 'some/folder/with/png/files'
files = [f for f in glob.glob(path + "*.png")]
img = []
for f in files:
    img.append(mpimg.imread(f))
N = len(files)

# generate graph
G = nx.watts_strogatz_graph(N,4,0.2)
pos=nx.spring_layout(G,k=3/sqrt(N))

# draw with images on nodes
nx.draw_networkx(G,pos,width=3,edge_color="r",alpha=0.6)
ax=plt.gca()
fig=plt.gcf()
trans = ax.transData.transform
trans2 = fig.transFigure.inverted().transform
imsize = 0.1 # this is the image size
for n in G.nodes():
    (x,y) = pos[n]
    xx,yy = trans((x,y)) # figure coordinates
    xa,ya = trans2((xx,yy)) # axes coordinates
    a = plt.axes([xa-imsize/2.0,ya-imsize/2.0, imsize, imsize ])
    a.imshow(img[n])
    a.set_aspect('equal')
    a.axis('off')
plt.show()

https://gist.github.com/munthe/7de513dc886917860f7b960a51c95e10找到

是一个似乎绘制在边缘而不是节点上的示例。