在社交网络中绘制networkx标签

问题描述 投票:1回答:1

我想在networkx图中绘制标签。我有以下不带标签的代码:

G=nx.Graph()
pos=nx.spring_layout(G)
for i in range(0,5000):
    G.add_edge(z.iloc[i,0],z.iloc[i,1])
plt.figure(figsize=(50,50))
nx.draw(G,pos=pos,node_size=25,node_color='red',cmap = plt.get_cmap('jet'))
plt.savefig("SOCIAL_NETWORK_names2.png")
plt.show()

enter image description here

但是,当我添加标签时:

labels={ i:j for i,j in enumerate(np.array(z.iloc[:,2]))}
labels

{0: 'Rebel',
 1: 'Happiness',
 2: 'Anger'
 ..... }

以下代码返回错误:

G=nx.Graph()
pos=nx.spring_layout(G)
for i in range(0,5000):
    G.add_edge(z.iloc[i,0],z.iloc[i,1])
plt.figure(figsize=(50,50))
nx.draw_networkx_edges(G,pos=pos,node_size=25,node_color='red',cmap = plt.get_cmap('jet'))
nx.draw_networkx_labels(G, pos=pos, labels=labels)
plt.savefig("SOCIAL_NETWORK_names2.png")
plt.show()

我收到以下错误:

KeyError                                  Traceback (most recent call last)
/opt/anaconda3/lib/python3.7/site-packages/networkx/drawing/nx_pylab.py in draw_networkx_nodes(G, pos, nodelist, node_size, node_color, node_shape, alpha, cmap, vmin, vmax, ax, linewidths, edgecolors, label, **kwds)
    395     try:
--> 396         xy = np.asarray([pos[v] for v in nodelist])
    397     except KeyError as e:

/opt/anaconda3/lib/python3.7/site-packages/networkx/drawing/nx_pylab.py in <listcomp>(.0)
    395     try:
--> 396         xy = np.asarray([pos[v] for v in nodelist])
    397     except KeyError as e:

KeyError: "'2656852680'"

During handling of the above exception, another exception occurred:

NetworkXError                             Traceback (most recent call last)
<ipython-input-304-6065b837b7f3> in <module>
      4     G.add_edge(z.iloc[i,0],z.iloc[i,1])
      5 plt.figure(figsize=(50,50))
----> 6 nx.draw(G,pos=pos,node_size=25,node_color='red',cmap = plt.get_cmap('jet'))
      7 nx.draw_networkx_labels(G, pos=pos, labels=labels)
      8 plt.savefig("SOCIAL_NETWORK_names2.png")

/opt/anaconda3/lib/python3.7/site-packages/networkx/drawing/nx_pylab.py in draw(G, pos, ax, **kwds)
    126 
    127     try:
--> 128         draw_networkx(G, pos=pos, ax=ax, **kwds)
    129         ax.set_axis_off()
    130         plt.draw_if_interactive()

/opt/anaconda3/lib/python3.7/site-packages/networkx/drawing/nx_pylab.py in draw_networkx(G, pos, arrows, with_labels, **kwds)
    277         pos = nx.drawing.spring_layout(G)  # default to spring layout
    278 
--> 279     node_collection = draw_networkx_nodes(G, pos, **kwds)
    280     edge_collection = draw_networkx_edges(G, pos, arrows=arrows, **kwds)
    281     if with_labels:

/opt/anaconda3/lib/python3.7/site-packages/networkx/drawing/nx_pylab.py in draw_networkx_nodes(G, pos, nodelist, node_size, node_color, node_shape, alpha, cmap, vmin, vmax, ax, linewidths, edgecolors, label, **kwds)
    396         xy = np.asarray([pos[v] for v in nodelist])
    397     except KeyError as e:
--> 398         raise nx.NetworkXError('Node %s has no position.' % e)
    399     except ValueError:
    400         raise nx.NetworkXError('Bad value in node positions.')

NetworkXError: Node "'2656852680'" has no position.

我该如何进行?

python networkx social-networking
1个回答
0
投票

pos是一个空字典,因为您创建的是空图。结果,当networkx尝试检索节点的位置时,您会收到KeyError。

>>> G=nx.Graph()
>>> pos=nx.spring_layout(G)
>>> pos
{}

通过在实际创建网络后移动它,您应该解决该问题。

© www.soinside.com 2019 - 2024. All rights reserved.