学习作图
极坐标作图
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()