Press ESC to close

python画蛛网图(雷达图)

一、概念

雷达图是一种由一系列等角辐条(称为半径)组成的图表,每个辐条代表一个变量。轮辐的数据长度与数据点变量的大小相对于所有数据点上变量的最大大小成正比。绘制一条线,连接每个辐条的数据值。这使该图块具有星形外观,所以又叫星图。

二、用途

主要用途观察最相似,是否有离群点。多用于控制质量改进,便于观察性能指标。也常用于表示技能的长处和短处。

三、画图

"""

======================================

Radar chart (aka spider or star chart)

======================================

This example creates a radar chart, also known as a spider or star chart [1]_.

Although this example allows a frame of either 'circle' or 'polygon', polygon

frames don't have proper gridlines (the lines are circles instead of polygons).

It's possible to get a polygon grid by setting GRIDLINE_INTERPOLATION_STEPS in

matplotlib.axis to the desired number of vertices, but the orientation of the

polygon is not aligned with the radial axes.

.. [1] http://en.wikipedia.org/wiki/Radar_chart

"""

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.path import Path

from matplotlib.spines import Spine

from matplotlib.projections.polar import PolarAxes

from matplotlib.projections import register_projection

def radar_factory(num_vars, frame='circle'):

"""Create a radar chart with `num_vars` axes.

This function creates a RadarAxes projection and registers it.

Parameters

----------

num_vars : int

Number of variables for radar chart.

frame : {'circle' | 'polygon'}

Shape of frame surrounding axes.

"""

# calculate evenly-spaced axis angles

theta = np.linspace(0, 2*np.pi, num_vars, endpoint=False)#角度(弧度制)

def draw_poly_patch(self):

# rotate theta such that the first axis is at the top

verts = unit_poly_verts(theta + np.pi / 2)

return plt.Polygon(verts, closed=True, edgecolor='k')

def draw_circle_patch(self):

# unit circle centered on (0.5, 0.5)

return plt.Circle((0.5, 0.5), 0.5) #画圆

patch_dict = {

'polygon': draw_poly_patch, 'circle': draw_circle_patch}

if frame not in patch_dict:

raise ValueError('unknown value for `frame`: %s' % frame)

class RadarAxes(PolarAxes):

name = 'radar'

# use 1 line segment to connect specified points

RESOLUTION = 1

# define draw_frame method

draw_patch = patch_dict[frame]

def __init__(self, *args, **kwargs):

super(RadarAxes, self).__init__(*args, **kwargs)

# rotate plot such that the first axis is at the top

self.set_theta_zero_location('N')

def fill(self, *args, **kwargs):

"""Override fill so that line is closed by default"""

closed = kwargs.pop('closed', True)

return super(RadarAxes, self).fill(closed=closed, *args, **kwargs)

def plot(self, *args,