从 2 列 csv 到 2 色 NetworkX 图

From 2 column csv to 2 color NetworkX graph

我想创建一个大型 networkx 图,将用户连接到他们观看的视频,例如社交图或网络类型图中的用户 -> 视频。大约有9000个用户节点和20000个视频节点。

CSV 文件示例

用户,视频

1, 11

2, 11

3、11

4、12

5、12

5、13

我在尝试什么?

G=nx.read_edgelist("test.csv", delimiter = ',', data=['user','highlight'], create_using=nx.Graph())

nx.draw(G)

我得到的结果:一个包含所有红色节点的图表。

我想要的:我希望用户节点为红色,视频节点为蓝色。预先感谢您的帮助。

import networkx as nx
import csv
import matplotlib.pyplot as plt;

file_edges=csv.reader(open('test.csv','rb'));

G=nx.Graph();
users=[];
video=[];
for row in file_edges:
    G.add_node(row[0],type='user');
    users.append(row[0]);
    G.add_node(row[1],type='video');
    video.append(row[1]);
    G.add_edge(row[0],row[1]);

pos=nx.spring_layout(G) # positions for all nodes
fig=plt.figure(1)
ax=fig.add_subplot(111);
nx.draw_networkx_nodes(G,pos=pos,nodelist=users,with_labels=True,node_size=150,node_color='red',node_shape='s', width=1.75,linewidths=0.2,font_size=5,font_family='serif')
nx.draw_networkx_nodes(G,pos=pos,nodelist=video,with_labels=True,node_size=150,node_color='blue',node_shape='s', width=1.75,linewidths=0.2,font_size=5,font_family='serif')
nx.draw_networkx_edges(G, pos=pos, edgelist=G.edges(), width=3, edge_color='black');
nx.draw_networkx_labels(G,pos,nodelabels=G.nodes(),font_size=8,font_family='serif',font_color='white',font_weight='bold')
ax.legend(['users','video'],loc=2,numpoints=1,scatterpoints=1,prop={'size':10}) # Scatterpoints will show the node marker (say square) only once
plt.gcf()
plt.axis('off')
plt.show()