我想要创建一个大型的网络图形,将用户连接到他们观看的视频,就像社交图或网络图中的用户->视频一样。大约有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)我得到的是:一个所有红色节点的图。
我想要的是:我希望用户节点是红色的,视频节点是蓝色的。提前谢谢你的帮助。
发布于 2015-06-09 22:21:02
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()https://stackoverflow.com/questions/30742370
复制相似问题