name = BaseData['球员']
score = BaseData['得分']
assist = BaseData['助攻']
rebound = BaseData['篮板']
steal = BaseData['抢断']
block = BaseData['盖帽']
num = BaseData['场次']
mistake = BaseData['失误']
def sortmax(li):
liratio=[]
limax=eval(str(li[0]))
for i in range(0,200):
if eval(str(li[i]))>=limax:
limax=eval(str(li[i]))
for i in range(0,200):
liratio.append(eval(str(li[i]))/limax)
return limax,liratio
scoremax,score1=sortmax(score)
assistmax,assist1=sortmax(assist)
reboundmax,rebound1=sortmax(rebound)
stealmax,steal1=sortmax(steal)
blockmax,block1=sortmax(block)
nummax,num1=sortmax(num)
mistakemax,mistake1=sortmax(mistake)
def pic(inputname):
for i in range(200):
if inputname==name[i]:
k=i
break
matplotlib.rcParams['font.family']='SimHei' #将绘图区域设置成中文字符
radar_labels = np.array(['得分', '助攻', '篮板','抢断','盖帽','场次','失误']) #雷达标签
nAttr = 7
data=[[score1[k]],[assist1[k]],[rebound1[k]],[steal1[k]],[block1[k]],[num1[k]],[mistake1[k]]]
data=np.array(data)
eachdata = np.concatenate((data,[data[0]]))
angles = np.linspace(0, 2*np.pi, nAttr, endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
fig = plt.figure(facecolor="white")
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, eachdata, 'o-', linewidth=2)
ax.fill(angles, eachdata, alpha=0.25)
ax.set_thetagrids(angles*180/np.pi,
radar_labels,
fontsize = 18)
ax.set_rgrids(np.arange(0,1.2,0.2),'-') #加了这一行后,一定要设置'-',a就没了网格线上的数字了(0.2-1.0),查了很久的一个坑,虽然有也没事,但是看着心烦。
plt.figtext(0.5, 1, inputname, ha='center', size=20)
plt.figtext(0.5,0,'球员能力图',ha='center',size=15,color='blue')
plt.grid(True)
# 我是以每一项的最大值作为雷达图的满值,所以不可能有球员在所有项目中都超出。
# 这样的操作花了我很多时间,因为在中间出了一个很难得bug,
# 斯蒂芬-库里,输入名,去上面找贼麻烦
inputname=input("请输入球员姓名:")
pic(inputname)
数据就是之前爬的,可以去看我上一篇博客,有详细的爬取过程。