文章链接:
https://mp.weixin.qq.com/s/Fm_W7QOfHXG6GsAIO8V69Q
有一种图他可以根据指定指标评价体系,给予评价并直观反映出来,如:
1、从企业收益性、生产性、流动性、安全性和成长性这几个方面评判经营状况;
2、根据9型人格每个维度打分,你属于什么类型;
3、王者荣耀中英雄“杀、死、助、团战率、推塔数、经济比”等评分的直观体现等等。
对的,他就是我们今天要介绍给大家的雷达图,英文名
Radar Chart,乳名蜘蛛网图,学名星图,别名戴布拉图,他的坐标轴很特别——平行坐标,轴径向排列~O(∩_∩)O哈哈~
目 录
极坐标介绍
Matplotlib绘制极坐标图
常用参数介绍
代码实现
极坐标介绍
极坐标
1、极点:在平面内取一个定点O;
2、极轴:引一条射线Ox
3、极径:选定一个长度单位和角度的正方向(通常取逆时针方向)。对于平面内任何一点M,用ρ表示线段OM的长度(有时也用r表示),θ表示从Ox到OM的角度,ρ叫做点M的极径
4、极角:θ叫做点M的极角,
5、极坐标:有序数对 (ρ,θ)就叫点M的极坐标,这样建立的坐标系叫做极坐标系。
通常情况下,M的极径坐标单位为1(长度单位),极角坐标单位为rad(或°)
Matplotlib绘制极坐标图
创建极坐标图
matplotlib的pyplot子库提供了绘制极坐标图的方法,在调用subplot()创建子图时通过设置projection='polar',便可创建一个极坐标子图,然后调用plot()在极坐标子图中绘图。
下面创建一个极坐标子图和一个直角坐标子图进行对比:
import numpy as np
from matplotlib import pyplot as plt
fig=plt.figure(figsize=(10,5))
ax1 = plt.subplot(121, projection='polar') #极坐标轴
ax2 = plt.subplot(122)
fig.subplots_adjust(wspace=0.4) #设置子图间的间距,为子图宽度的40%
theta=np.arange(0,2*np.pi,0.02)
ax1.plot(theta,theta/6,'-.',lw=2)
ax2.plot(theta,theta/6,'-.',lw=2)
plt.show()
常用参数介绍
绘制雷达图,并没有直接的函数,而是用一下坐标轴的参数予以定义。
极坐标正方向
set_theta_direction:方法用于设置极坐标的正方向
set_theta_direction的参数值为1,'counterclockwise'或者是'anticlockwise'的时候,正方向为逆时针;
set_theta_direction的参数值为-1或者是'clockwise'的时候,正方向为顺时针;
极坐标0°位置
set_theta_zero_location方法用于设置极坐标0°位置
0°可设置在八个位置,分别为N, NW, W, SW, S, SE, E, NE
参数值为'N','NW','W','SW','S','SE','E','NE'时,0°分别对应的位置为方位N, NW, W, SW, S, SE, E, NE;
极坐标角度网格线显示
set_thetagrids方法用于设置极坐标角度网格线显示
参数为所要显示网格线的角度值列表
默认显示0°、45°、90°、135°、180°、225°、270°、315°的网格线
极坐标角度偏离
set_theta_offset方法用于设置角度偏离
参数值为弧度值数值
极坐标极径网格线显示
set_rgrids方法用于设置极径网格线显示
参数值为所要显示网格线的极径值列表,最小值不能小于等于0
极坐标极径标签位置
set_rlabel_position方法用于设置极径标签显示位置
参数为标签所要显示在的角度
极坐标极径范围
set_rlim方法用于设置显示的极径范围
参数为极径最小值,最大值
极坐标极径最大值
set_rmax方法用于设置显示的极径最大值
该方法要在绘制完图像后使用才有效
极坐标极径最小值
set_rmin方法用于设置显示的极径最小值
该方法要在绘制完图像后使用才有效
极坐标极径网格线显示范围
set_rticks方法用于设置极径网格线的显示范围
如ax.set_rticks(np.arange(0.1, 0.9, 0.2))
代码实现
import numpy as np
from matplotlib import pyplot as plt
fig=plt.figure(figsize=(10,5))
ax=fig.add_subplot(1,1,1,polar=True) #设置一个坐标轴为极坐标体系
jingke={"推进":100,"战绩(KDA)":30,"生存":90,"团战":60,"发育":60,"输出":20} #创建英雄数据
y=np.array([i for i in jingke.values()]).astype(int) #提取英雄的信息
label=np.array([j for j in jingke.keys()]) #提取键作为标签
x = np.linspace(0, 2*np.pi, len(data1), endpoint=False) #data1里有几个数据,就把整圆360°分成几份
x1 = np.concatenate((x, [x[0]])) #将x的第一个值添加到原来的x组成第一个和最后一个元素一致的新列表,以实现x闭合
y1 = np.concatenate((y, [y[0]])) #将y的第一个值添加到原来的y组成第一个和最后一个元素一致的新列表,以实现y闭合
#绘制极坐标
ax.set_thetagrids(angles*180/np.pi, label, fontproperties="Microsoft Yahei") #设置网格标签
ax.plot(x1,y1,"o-")
ax.set_theta_zero_location('E') #设置极坐标0°位置
ax.set_rlim(0,100) #设置显示的极径范围
ax.fill(x1,y1,facecolor='b', alpha=0.2) #填充颜色
ax.set_rlabel_position(15)
ax.set_title("荆轲",fontproperties="SimHei",fontsize=16) #设置标题
plt.show()
效果图如下:
更多精彩内容,就在官方微信公众号
https://mp.weixin.qq.com/s/Fm_W7QOfHXG6GsAIO8V69Q