NBA球员能力雷达图matplotlib,pandas

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)

数据就是之前爬的,可以去看我上一篇博客,有详细的爬取过程。

你可能感兴趣的:(selenium,数据可视化,python)