NetworkX图中的自定义艺术

时间:2016-02-19 19:33:21

标签: plot networkx

是否有人知道在NetworkX图形可视化中放置图像(矢量或栅格)代替节点或边缘的文本标签的方法?

我更喜欢使用matplotlib绘图引擎而不是graphviz的解决方案,但是会采用任何一种解决方案。

1 个答案:

答案 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')

它几乎适合我。我明白了: enter image description here

我认为这是因为我的电脑上出现了一些奇怪的问题。当我运行提供at matplotlib.org的代码来解释transData.transform时,它应该会给我enter image description here,但我会得到enter image description here

所以我觉得我所看到的偏移可能是我机器上的问题,我想尝试另一台电脑。无论如何,请告诉我这是否对您有用,并希望它至少指出您正确的方向。