python繪圖球員技能圖的制作

python繪圖球員技能圖的制作

<pre>

* coding:utf-8 *

import numpy as np
import matplotlib.pyplot as plt

引入字體管理

from matplotlib.font_manager import FontProperties

設置繪圖樣式

plt.style.use('ggplot')

設置字體

font=FontProperties(fname=r'/System/Library/Fonts/STHeiti Light.ttc',size=9)

設置技能球員技能

需要用u進行說明為Unicode編碼方式

ability_label=[u'進攻',u'防守',u'盤帶',u'速度',u'體力',u'射術']

定義技能的個數(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')

生成球員的基礎數(shù)據

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)

因為圖為首尾閉合,且后一個數(shù)據=第一個數(shù)據

theta=np.append(theta,theta[0])

球員數(shù)據拼接

player['M']=np.append(player['M'],player['M'][0])

繪圖

ax1.plot(theta,player['M'],'r')

填充

ax1.fill(theta,player['M'],'r',alpha=0.3)

設置x坐標為需要的角度

ax1.set_xticks(theta)

替換坐標角度為技能標簽

ax1.set_xticklabels(ability_label,y=0.1,fontproperties=font)

設置圖的標題

ax1.set_title(u'梅西',fontproperties=font,color='r',size=15,y=1)

將y坐標強制定義,避免數(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

設置繪圖樣式

plt.style.use('ggplot')

設置字體

font=FontProperties(fname=r'/System/Library/Fonts/STHeiti Light.ttc',size=9)

設置技能球員技能

需要用u進行說明為Unicode編碼方式

ability_label=[u'進攻',u'防守',u'盤帶',u'速度',u'體力',u'射術']

定義球員的姓名

titles=[u'梅西',u'哈維',u'皮克',u'切赫']

定義技能的個數(shù)

ability_size=len(ability_label)

生成圖形和坐標對象

fig,axes=plt.subplots(ncols=2,nrows=2,subplot_kw=dict(polar=True))

生成基礎數(shù)據

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)

因為圖為首尾閉合,且后一個數(shù)據=第一個數(shù)據

theta=np.append(theta,theta[0])

獲取color的列表

colors=plt.rcParams['axes.color_cycle']

如果key不為數(shù)字,而在字典中需要計數(shù),又不想引用新的變量,可以對字典進行包裝.

例如 enumerate(player.items()),此時循環(huán)中出現(xiàn)的字典的k值為0,1,2,3...v值為tuple對象,直接用v[0],可以

取到原字典中的key,v[1]可以取到原字典中的value

for k,v in player.items():
# 形成循環(huán)數(shù)據,因為閉合圖形所以需要增加一組數(shù)據
v=np.append(v,v[0])
# 生成坐標
ax1=axes.ravel()[k]
# 生成顏色
color=colors[k]
# 繪制圖形邊框
ax1.plot(theta, v, color)
# 填充圖形
ax1.fill(theta,v,color,alpha=0.3)
# 調整x為顯示的技能項
ax1.set_xticks(theta)
# 設置技能項為文字
ax1.set_xticklabels(ability_label,y=0.1,fontproperties=font)
# 設置標題
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>

figure_1.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,777評論 25 709
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,823評論 6 427
  • 人生的目的是“生活得寫意”。 享受生活要有一定的物質基礎,所以我們要努力地學習和工作,創(chuàng)造財富,發(fā)展經濟。但勞作不...
    1T婉閱讀 357評論 0 0
  • "Daddy, Daddy, the color pencil is too blunt, can you hel...
    Jack攝影閱讀 606評論 0 0
  • 來我的寒枝吧 也不想你說一個溫暖的故事 可以說說你的勵志 走南而闖北,春夏又秋冬 來我的枝頭吧 春已將至,木也將腐...
    菇蒲閱讀 255評論 0 0

友情鏈接更多精彩內容