python -networkx画网络图注意
使用networx画网络图,本人使用anaconda的spyder,之前没有装networkx,之后使用conda install networkx随机装了,后来发现matplotlib和networkx版本不匹配,经过反复的install,找到了两者的匹配版本,献上图。在这里为防止其他萌新入坑,建议使用 conda install networkx==2.0
,conda install matplotlib==2.2.3
。最后,献上部分网络图:
- 网络图代码如下:
# -*- coding: utf-8 -*-
"""
Created on Sat Feb 15 23:48:34 2020
@author: Doctor哈伦裤
"""
from matplotlib.colors import ListedColormap
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from collections import Counter
def painting(begin_row):
pass_nodes=[]
cmap=ListedColormap([ '#87CEEB','#FFD700', '#808000'])
pass_ways_part=[]
path=r"passingevents.csv"
data=pd.read_csv(path)
time=0
begin_number=0
data["pass_ways_total"]=data["OriginPlayerID"]+","+data["DestinationPlayerID"]
for row in range(1,len(data.index)-1):
if (data.loc[row][0]==begin_row):
if(time==0):
time=time+1,
begin_number=row,
number=begin_number[0]+1
else:
number=number+(1,)[0]
for row in range(begin_number[0],number):
if ((data.loc[row][0]==begin_row)and(data.loc[row][1]=="Huskies")):
pass_nodes.append(data.loc[row][2]),
pass_nodes.append(data.loc[row][3]),
pass_ways_part.append(data.loc[row][11])
pass_ways_part=sorted(pass_ways_part)
pass_ways_part_dict=Counter(pass_ways_part)
pass_relation=[i.split(",") for i in pass_ways_part_dict.keys()]
pass_relation=[tuple(i) for i in pass_relation]
#print(np.shape(pass_relation))
#print(np.shape(pass_relation[0]))
pass_node=set(pass_nodes)
node_number=[]
for i in pass_node:
node_number.append(pass_nodes.count(i))
nodes_numbers=dict(zip(pass_node,node_number))
#print(nodes_numbers)
edgeWidth=[]
for i in pass_ways_part_dict.values():
edgeWidth.append(i)
plt.figure(figsize=(12, 8) , dpi=50)
G=nx.MultiGraph()
#print(pass_node)
G.add_nodes_from(pass_node)
G.add_edges_from(pass_relation)
#print(len(G.edges()))
D=dict(G.degree)
pos = nx.spring_layout(G)
plt.subplot()
nx.draw(G,pos,nodelist=D.keys(),node_size=[v*30 for v in D.values()],node_color=range(len(G.nodes())),node_cmap=plt.cm.Paired,with_labels=True,
edge_color= range(len(G.edges())),edge_cmap=cmap,width=edgeWidth,alpha=1)
plt.show()