1. 程式人生 > 其它 >python 子圖間距_Python畫王者榮耀英雄能力雷達圖

python 子圖間距_Python畫王者榮耀英雄能力雷達圖

技術標籤:python 子圖間距

現有以下表格,我需要畫成第二張圖中的雷達圖(類似fifa足球、王者榮耀裡面的那種球員能力圖)

dd7a2c050e751119ce0ecf6c1b81e0de.png 496219bccdd39fab290e96808391eee8.png

雷達圖函式用到以下包:

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學習交流群,有想入群的同學,可以新增下面小助手微信,他會拉大家入群哈~