Ipython 从2列csv到2色NetworkX图形

Ipython 从2列csv到2色NetworkX图形,ipython,nodes,networkx,graph-databases,edges,Ipython,Nodes,Networkx,Graph Databases,Edges,我想创建一个大型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) 我得到的是:一个包含所

我想创建一个大型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)
我得到的是:一个包含所有红色节点的图


我想要的:我想要用户节点为红色,视频节点为蓝色。提前感谢您的帮助。

这不起作用,因为第[0]行包括用户和突出显示列,而第[1]行不存在。从您的评论中,我了解到数据没有用“,”分隔。因此,如果拆分
行[0]。拆分(“,”
,并获取数组中的第一个元素和第二个元素,它应该可以工作。PS:我的答案中写的代码有效。还要再次检查输入文件。
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()