是否有人知道在NetworkX图形可视化中放置图像(矢量或栅格)代替节点或边缘的文本标签的方法?
我更喜欢使用matplotlib绘图引擎而不是graphviz的解决方案,但是会采用任何一种解决方案。
答案 0 :(得分:1)
原则上,以下内容应该有效。我将点转换为像素坐标,然后使用figimage将图像放在那个点上。
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib.image as image
im = image.imread('Lower_case_a.png')
G=nx.fast_gnp_random_graph(2,1)
pos = nx.spring_layout(G)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.patch.set_alpha(0)
ax.axis(xmin=-1,xmax=2,ymin=-1,ymax=2)
for node in G.nodes():
x,y = pos[node]
trans_x, trans_y = ax.transData.transform((x,y))
fig.figimage(im,trans_x,trans_y) #could use custom image for each node
nx.draw_networkx_edges(G,pos)
plt.savefig('tmp.png')
我认为这是因为我的电脑上出现了一些奇怪的问题。当我运行提供at matplotlib.org的代码来解释transData.transform时,它应该会给我,但我会得到
所以我觉得我所看到的偏移可能是我机器上的问题,我想尝试另一台电脑。无论如何,请告诉我这是否对您有用,并希望它至少指出您正确的方向。