python繪圖球員技能圖的制作
<pre>
* coding:utf-8 *
import numpy as np
import matplotlib.pyplot as plt
引入字體管理
from matplotlib.font_manager import FontProperties
設(shè)置繪圖樣式
plt.style.use('ggplot')
設(shè)置字體
font=FontProperties(fname=r'/System/Library/Fonts/STHeiti Light.ttc',size=9)
設(shè)置技能球員技能
需要用u進(jìn)行說(shuō)明為Unicode編碼方式
ability_label=[u'進(jìn)攻',u'防守',u'盤帶',u'速度',u'體力',u'射術(shù)']
定義技能的個(gè)數(shù)
ability_size=len(ability_label)
繪制出基本的圖形
ax1=plt.subplot(221,projection='polar')
ax2=plt.subplot(222,projection='polar')
ax3=plt.subplot(223,projection='polar')
ax4=plt.subplot(224,projection='polar')
生成球員的基礎(chǔ)數(shù)據(jù)
player={
'M':np.random.randint(size=ability_size,low=60,high=99),
'H': np.random.randint(size=ability_size, low=60, high=99),
'P': np.random.randint(size=ability_size, low=60, high=99),
'Q': np.random.randint(size=ability_size, low=60, high=99),
}
生成角度
theta=np.linspace(0,2*np.pi,6,endpoint=False)
因?yàn)閳D為首尾閉合,且后一個(gè)數(shù)據(jù)=第一個(gè)數(shù)據(jù)
theta=np.append(theta,theta[0])
球員數(shù)據(jù)拼接
player['M']=np.append(player['M'],player['M'][0])
繪圖
ax1.plot(theta,player['M'],'r')
填充
ax1.fill(theta,player['M'],'r',alpha=0.3)
設(shè)置x坐標(biāo)為需要的角度
ax1.set_xticks(theta)
替換坐標(biāo)角度為技能標(biāo)簽
ax1.set_xticklabels(ability_label,y=0.1,fontproperties=font)
設(shè)置圖的標(biāo)題
ax1.set_title(u'梅西',fontproperties=font,color='r',size=15,y=1)
將y坐標(biāo)強(qiáng)制定義,避免數(shù)字出現(xiàn)重影
ax1.set_yticks([20,40,60,80,100])
player['H']=np.append(player['H'],player['H'][0])
ax2.plot(theta,player['H'],'g')
ax2.fill(theta,player['H'],'g',alpha=0.3)
ax2.set_xticks(theta)
ax2.set_xticklabels(ability_label,y=0.1,fontproperties=font)
ax2.set_title(u'哈維',fontproperties=font,color='r',size=15,y=1)
ax2.set_yticks([20,40,60,80,100])
player['P']=np.append(player['P'],player['P'][0])
ax3.plot(theta,player['P'],'b')
ax3.fill(theta,player['P'],'b',alpha=0.3)
ax3.set_xticks(theta)
ax3.set_xticklabels(ability_label,y=0.1,fontproperties=font)
ax3.set_title(u'皮克',fontproperties=font,color='r',size=15,y=1)
ax3.set_yticks([20,40,60,80,100])
player['Q']=np.append(player['Q'],player['Q'][0])
ax4.plot(theta,player['Q'],'y')
ax4.fill(theta,player['Q'],'y',alpha=0.3)
ax4.set_xticks(theta)
ax4.set_xticklabels(ability_label,y=0.1,fontproperties=font)
ax4.set_title(u'切赫',fontproperties=font,color='r',size=15,y=1)
ax4.set_yticks([20,40,60,80,100])
顯示出圖
plt.show()
</pre>
代碼變瘦
<pre>
* coding:utf-8 *
import numpy as np
import matplotlib.pyplot as plt
引入字體管理
from matplotlib.font_manager import FontProperties
設(shè)置繪圖樣式
plt.style.use('ggplot')
設(shè)置字體
font=FontProperties(fname=r'/System/Library/Fonts/STHeiti Light.ttc',size=9)
設(shè)置技能球員技能
需要用u進(jìn)行說(shuō)明為Unicode編碼方式
ability_label=[u'進(jìn)攻',u'防守',u'盤帶',u'速度',u'體力',u'射術(shù)']
定義球員的姓名
titles=[u'梅西',u'哈維',u'皮克',u'切赫']
定義技能的個(gè)數(shù)
ability_size=len(ability_label)
生成圖形和坐標(biāo)對(duì)象
fig,axes=plt.subplots(ncols=2,nrows=2,subplot_kw=dict(polar=True))
生成基礎(chǔ)數(shù)據(jù)
player = dict.fromkeys(range(4),np.random.randint(size=ability_size,low=60,high=99));
生成角度
theta=np.linspace(0,2*np.pi,6,endpoint=False)
因?yàn)閳D為首尾閉合,且后一個(gè)數(shù)據(jù)=第一個(gè)數(shù)據(jù)
theta=np.append(theta,theta[0])
獲取color的列表
colors=plt.rcParams['axes.color_cycle']
如果key不為數(shù)字,而在字典中需要計(jì)數(shù),又不想引用新的變量,可以對(duì)字典進(jìn)行包裝.
例如 enumerate(player.items()),此時(shí)循環(huán)中出現(xiàn)的字典的k值為0,1,2,3...v值為tuple對(duì)象,直接用v[0],可以
取到原字典中的key,v[1]可以取到原字典中的value
for k,v in player.items():
# 形成循環(huán)數(shù)據(jù),因?yàn)殚]合圖形所以需要增加一組數(shù)據(jù)
v=np.append(v,v[0])
# 生成坐標(biāo)
ax1=axes.ravel()[k]
# 生成顏色
color=colors[k]
# 繪制圖形邊框
ax1.plot(theta, v, color)
# 填充圖形
ax1.fill(theta,v,color,alpha=0.3)
# 調(diào)整x為顯示的技能項(xiàng)
ax1.set_xticks(theta)
# 設(shè)置技能項(xiàng)為文字
ax1.set_xticklabels(ability_label,y=0.1,fontproperties=font)
# 設(shè)置標(biāo)題
ax1.set_title(titles[k],fontproperties=font,color=color,size=15,y=1)
# 統(tǒng)一規(guī)定能力值
ax1.set_yticks([20,40,60,80])
顯示出圖
plt.show()
</pre>