python_matplotlib DAY_23(1)绘制FIFA,实况的球员能力图

学习作图
极坐标作图
TIPS:
小伙伴们或多或少都会接触FIFA,实况等足球游戏,球员的能力图能直观的反映一个球员的能力水平,今天就着手画一个球员能力图,体会一下自己当角色设计师的感觉
模型分析
1.使用极坐标画出闭合图像
2.拟定画4名球员
3.球员能力选取六种,体力,射术,防守,体力,进攻,速度,这就说明极坐标的角度轴需要等分为6块
4.完成填充和注释,更加直观

设计步骤
1.完成标签,数据,包等前提步骤

import numpy as np
import matplotlib.pyplot as plt#画图必备

ability_label = ['盘带', '射术', '体力', '进攻', '防守',u'速度']
theta = [0, np.pi / 3, 2 * np.pi / 3, np.pi, 4 * np.pi / 3, 5 * np.pi / 3, 0]
player = {
    "M": np.random.randint(60, 99, 6),
    "H": np.random.randint(60, 99, 6),
    "P": np.random.randint(60, 99, 6),
    "Q": np.random.randint(60, 99, 6),
}#初步数据完成,因为绘制极坐标,所以是距离加角度联合控制
player["M"] = np.append(player["M"], player["M"][0])
#因为数据是随机产生的,而且我们需要花封闭图型,无法导致首尾闭合
#所以使用np的appned操作,让最后一维数据与第一位相等,画出闭合图像

2.绘制图像

fig = plt.figure()
plt.style.use("ggplot")
ax1 = fig.add_subplot(111, projection='polar')#使用极坐标
ax1.plot(theta, player["M"], 'r')

初步图像
3.修改和注释
我们定义了6个数据,但是坐标轴刻度有8个
其次我们没有完成内部填充
接着我们还要完成坐标轴的名称修改
最后加上标题

ax1.fill(theta, player["M"], 'r', alpha=0.3)#内部填充
ax1.set_xticks(theta)#将角度划分成我们定义的theta
ax1.set_xticklabels(ability_label)#将调度的坐标设置标签
ax1.set_yticks([20, 40, 60, 80, 100])#设置距离标签
ax1.set_title('梅西', position=(0.5, 1))#加上标题

半成品图像
4.文字显示
因为无法显示中文,所以我查阅了很多资料,最简单的方法是如下
在代码中导入

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
#同时我们要在中文前面加上u

后期实验发现加不加u都可以完成显示
成品图

剩下三个小伙伴可以自己尝试

5.完整代码如下

from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']

import numpy as np
import matplotlib.pyplot as plt

ability_label = [u'盘带', u'射术', u'体力', u'进攻', u'防守', u'速度']
theta = [0, np.pi / 3, 2 * np.pi / 3, np.pi, 4 * np.pi / 3, 5 * np.pi / 3, 0]
player = {
    "M": np.random.randint(60, 99, 6),
    "H": np.random.randint(60, 99, 6),
    "P": np.random.randint(60, 99, 6),
    "Q": np.random.randint(60, 99, 6),
}
fig = plt.figure()
plt.style.use("ggplot")
ax1 = fig.add_subplot(111, projection='polar')

player["M"] = np.append(player["M"], player["M"][0])
ax1.plot(theta, player["M"], 'r')
ax1.fill(theta, player["M"], 'r', alpha=0.3)
ax1.set_xticks(theta)
ax1.set_xticklabels(ability_label)
ax1.set_yticks([20, 40, 60, 80, 100])
ax1.set_title(u'梅西', position=(0.5, 1))

plt.show()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值