Нарисуйте метки networkx в социальной сети - PullRequest
0 голосов
/ 05 февраля 2020

Я хотел бы нарисовать метки на графике 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.

Как продолжить?

1 Ответ

0 голосов
/ 05 февраля 2020

pos - пустой диктант, поскольку вы создаете с пустым графиком. Как следствие, вы получаете KeyError, когда networkx пытается получить позицию для узла.

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

Перемещая его после фактического создания сети, вы должны решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...