用多个指标评判一个对象,你需要一张matplotlib雷达图/极坐标图

用多个指标评判一个对象,你需要一张matplotlib雷达图/极坐标图_第1张图片
图片发自App

文章链接:

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雷达图/极坐标图_第2张图片
图片发自App



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()

用多个指标评判一个对象,你需要一张matplotlib雷达图/极坐标图_第3张图片
图片发自App



常用参数介绍

绘制雷达图,并没有直接的函数,而是用一下坐标轴的参数予以定义。

极坐标正方向

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()

效果图如下:

用多个指标评判一个对象,你需要一张matplotlib雷达图/极坐标图_第4张图片
图片发自App

更多精彩内容,就在官方微信公众号

https://mp.weixin.qq.com/s/Fm_W7QOfHXG6GsAIO8V69Q

你可能感兴趣的