2018-05-21:
极点:以圆的中心作为极点O,
O
极轴:以0°的方向引一条射线极轴Ox,
Ox
极径:选定一个长度单位r
r
极角:以Ox正方向开始计算角度θ(通常取逆时针方向)
θ
极坐标:以极点O作为圆心,以极昼Ox的方向作为起点,以极径r作为半径,画一个以极角θ的扇形,最终圆规脚定的位置就是极坐标M
M
使用matplotlib画雷达图,也就是画极坐标,使用plt.polar函数画一张空白极地图
plt.polar
import matplotlib.pyplot as plt plt.polar() plt.show()
在图中已知的信息是极点(圆心),极轴(0°的方向)
来看一下polar的参数,前面两个特定参数
polar
theta就是我们的极角θ;
theta
r就是我们的极径。
我们先在这个图中标记出一个极坐标点
import numpy as np import matplotlib.pyplot as plt plt.polar(0.25*np.pi,20,ro,lw=2) plt.ylim(0,100) #设置极轴的上下限 plt.show()
一个π是180度,所以极角是0.25np.pi=90° ,极轴是20 。
π
0.25np.pi=90°
20
用圆规,以圆心作为中心点,以20作为半径,从0°开始,逆时针方向画90°,圆规脚最终停止的点就是极坐标
plt.polar(0.25*np.pi,20,ro,lw=2)
ro绘制的极坐标图形为红色圆点;
ro
lw=2绘制的极坐标图形的宽度为2。
lw=2
最终效果如下
当给定多个极角和极轴时,
import numpy as np import matplotlib.pyplot as plt theta = np.array([0.25,0.75,1,1.5]) r = [20,60,40,80] plt.polar(theta*np.pi,r,ro,lw=2) plt.ylim(0,100) plt.show()
则在图中绘制出多个点,(0.25*π,20),(0.75*π,60),(1*π,40),(1.5*π,80)
知道极坐标点后,将每个点用线连接起来,那就是雷达图了,将图形绘制样式修改成ro-
ro-
plt.polar(theta*np.pi,r,ro-,lw=2)
然而发现没有闭合
那就在构造一个极坐标点,和第一个点重叠
import numpy as np import matplotlib.pyplot as plt theta = np.array([0.25,0.75,1,1.5,0.25]) r = [20,60,40,80,20] plt.polar(theta*np.pi,r,ro-,lw=2) plt.ylim(0,100) plt.show()
这样绘制出来的就是一个完成的雷达图,剩下的就是对图形的修整。
import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] = [SimHei]
name = [语文,数学,英语,物理,化学] #标签 theta = np.linspace(0,2*np.pi,len(name),endpoint=False) #将圆根据标签的个数等比分 value = np.random.randint(50,100,size=5) #在60-120内,随机取5个数 theta = np.concatenate((theta,[theta[0]])) #闭合 value = np.concatenate((value,[value[0]])) #闭合
ax = plt.subplot(111,projection = polar) #构建图例 ax.plot(theta,value,m-,lw=1,alpha = 0.75) #绘图 ax.fill(theta,value,m,alpha = 0.75) #填充 ax.set_thetagrids(theta*180/np.pi,name) #替换标签 ax.set_ylim(0,110) #设置极轴的区间 ax.set_theta_zero_location(N) #设置极轴方向 ax.set_title(木子李-五维图,fontsize = 20) #添加图描述 plt.show()