本文通过画球员能力雷达图,提供matplotlib雷达图模板,后续如果工作中需要使用,直接套用本模板就行。
import numpy as np
from matplotlib import pyplot as plt
#显示中文
plt.rcParams['font.sans-serif']=['Microsoft YaHei']#能力标签
ability_label=['投射','防守','篮板','组织','爆发力','关键表现']
#设置图形大小
fig=plt.figure(4,figsize=(8,8))
#生成4个子图
ax1=fig.add_subplot(2,2,1,projection='polar')
ax2=fig.add_subplot(2,2,2,projection='polar')
ax3=fig.add_subplot(2,2,3,projection='polar')
ax4=fig.add_subplot(2,2,4,projection='polar')#伪造的数据
player={'詹姆斯':[88,83,88,90,93,94],'杜兰特':[92,81,85,89,90,94],'西蒙斯':[73,89,86,88,81,72],'奥尼尔':[56,93,97,60,84,88]}
#2pi平均分成6份
theta=np.linspace(0,2*np.pi,6,endpoint=False)
#首尾相连
theta1=np.append(theta,theta[0])
player['詹姆斯']=np.append(player['詹姆斯'],player['詹姆斯'][0])
ax1.plot(theta1,player['詹姆斯'],'red')
#填充
ax1.fill(theta1,player['詹姆斯'],'red',alpha=0.3)
ax1.set_xticks(theta)
ax1.set_xticklabels(ability_label,fontsize=6)
ax1.set_title('詹姆斯',color='red',size=15,y=1.1)
#plt.title('球员能力图')player['杜兰特']=np.append(player['杜兰特'],player['杜兰特'][0])
ax2.plot(theta1,player['杜兰特'],'blue')
ax2.fill(theta1,player['杜兰特'],'blue',alpha=0.3)
ax2.set_xticks(theta)
ax2.set_xticklabels(ability_label,fontsize=6)
ax2.set_title('杜兰特',color='blue',size=15,y=1.1)player['西蒙斯']=np.append(player['西蒙斯'],player['西蒙斯'][0])
ax3.plot(theta1,player['西蒙斯'],'green')
ax3.fill(theta1,player['西蒙斯'],'green',alpha=0.3)
ax3.set_xticks(theta)
ax3.set_xticklabels(ability_label,fontsize=6)
ax3.set_title('西蒙斯',color='green',size=15,y=1.05)
ax3.set_yticks([20,40,60,80,100])player['奥尼尔']=np.append(player['奥尼尔'],player['奥尼尔'][0])
ax4.plot(theta1,player['奥尼尔'],'y')
ax4.fill(theta1,player['奥尼尔'],'y',alpha=0.3)
ax4.set_xticks(theta)
ax4.set_xticklabels(ability_label,fontsize=6)
ax4.set_title('奥尼尔',color='y',size=15,y=1.05)plt.show()
运行代码最后生成的图形如下:
如果仅想生成1个雷达图,将代码稍作修改即可:
import numpy as np
from matplotlib import pyplot as plt
#显示中文
plt.rcParams['font.sans-serif']=['Microsoft YaHei']#生成能力标签ability_label=['投射','防守','篮板','组织','爆发力','关键表现']
fig=plt.figure(4,figsize=(4,4))
#生成4个子图
ax1=fig.add_subplot(1,1,1,projection='polar')player={'詹姆斯':[88,83,88,90,93,94],'杜兰特':[92,81,85,89,90,94],'西蒙斯':[73,89,86,88,81,72],'奥尼尔':[56,93,97,60,84,88]}
#平均分成6份
theta=np.linspace(0,2*np.pi,6,endpoint=False)
#首尾相连
theta1=np.append(theta,theta[0])
player['詹姆斯']=np.append(player['詹姆斯'],player['詹姆斯'][0])
ax1.plot(theta1,player['詹姆斯'],'red',label='詹姆斯')player['杜兰特']=np.append(player['杜兰特'],player['杜兰特'][0])
ax1.plot(theta1,player['杜兰特'],'blue',label='杜兰特')player['西蒙斯']=np.append(player['西蒙斯'],player['西蒙斯'][0])
ax1.plot(theta1,player['西蒙斯'],'green',label='西蒙斯')player['奥尼尔']=np.append(player['奥尼尔'],player['奥尼尔'][0])
ax1.plot(theta1,player['奥尼尔'],'y',label='奥尼尔')plt.legend(loc=(0.88,0.82),fontsize=8)plt.show()