python 子圖間距_Python畫王者榮耀英雄能力雷達圖
阿新 • • 發佈:2020-12-26
技術標籤:python 子圖間距
現有以下表格,我需要畫成第二張圖中的雷達圖(類似fifa足球、王者榮耀裡面的那種球員能力圖)
雷達圖函式用到以下包:
import math
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
匯入中文相關字型
# 匯入中文
import matplotlib.font_manager as font_manager
font_dirs = ['./font']
font_files = font_manager.findSystemFonts(fontpaths=font_dirs)
font_list = font_manager.createFontList(font_files)
font_manager.fontManager.ttflist.extend(font_list)
plt.rcParams['font.family'] = 'SimHei'
# 啟用主題
plt.style.use('ggplot')
獲取極徑範圍
# 獲取極徑範圍
def get_range(data_list):
max = min = 0
for _, data in data_list.items:
for v in data:
if v < min:
min = v
if v > max:
max = v
return [min, max]
生成能力分佈圖
# 生成能力分佈圖
def generate_ability_map(abilities, data_list, rows=3):
min, max = get_range(data_list)
# 根據能力項等分圓
angles = np.linspace(0, 2 * np.pi, len(abilities), endpoint=False)
angles = np.append(angles, angles[0])
# 生成n個子圖
fg, axes = plt.subplots(math.ceil(len(data_list) / rows), rows, subplot_kw=dict(polar=True),figsize=(9,9))
# 調整子圖間距
plt.subplots_adjust(wspace =0.6, hspace =0.6)
# 打散為一維陣列
axes = axes.ravel
# 獲取所有支援的顏色
colors = list(mcolors.TABLEAU_COLORS)
# 迴圈繪製
i = 0
for name, data in data_list.items:
data = np.append(np.array(data), data[0])
ax = axes[i]
# 繪製線條
ax.plot(angles, data, color=colors[i])
# 填充顏色
ax.fill(angles, data, alpha=0.7, color=colors[i])
# 設定角度
ax.set_xticks(angles)
# 設定座標軸名稱
ax.set_xticklabels(abilities)
# 設定名稱
ax.set_title(name, size=10, color='black', position=(0.5, 0.4))
# 設定極徑最小值
ax.set_rmin(min)
# 設定極徑最大值(最大值加0.1,要不線條最外圈線顯示不完全)
ax.set_rmax(max + 0.1)
i = i + 1
plt.show
呼叫:
#資料
abilities = ['靈活性', '功能性', '平穩性', '安全性', '耐用性', '經濟性']
super_heros = {
'固定點降落': [2,1,5,5,4,3],
'任意點降落': [5,5,2,3,3,4],
'區域性最優點降落': [4,5,4,4,3,4],
}
#畫圖
generate_ability_map(abilities, super_heros)
程式執行後,得到文中開始的圖:
Python學習交流群
為了讓大家更加即時地溝通學習,我們建了一個Python學習交流群,有想入群的同學,可以新增下面小助手微信,他會拉大家入群哈~