python 雷达图不填充_Matplotlib垂直线之间的雷达图填充

本文介绍了如何使用matplotlib库在Python中绘制雷达图,并展示如何填充雷达图的区域。通过定义_RadarAxes_ 类和相关方法,实现了雷达图的绘制,包括设置轴标签、添加垂直线以及调整线样式等功能。
摘要由CSDN通过智能技术生成

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

from math import pi

data = [1, 5, 10, 11, 15]

data = np.asarray(data)

labels = [10, 20, 30, 40, 50]

event1 = 3

st_dev_event1 = 1

def _radar_factory(num_vars):

theta = 2*np.pi * np.linspace(0, 1-1./num_vars, num_vars)

theta += np.pi/2

def unit_poly_verts(theta):

x0, y0, r = [0.5] * 3

verts = [(r*np.cos(t) + x0, r*np.sin(t) + y0) for t in theta]

return verts

class RadarAxes(PolarAxes):

name = 'radar'

RESOLUTION = 1

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

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

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

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

lines = super(RadarAxes, self).plot(*args, **kwargs)

for line in lines:

self._close_line(line)

def _close_line(self, line):

x, y = line.get_data()

if x[0] != x[-1]:

x = np.concatenate((x, [x[0]]))

y = np.concatenate((y, [y[0]]))

line.set_data(x, y)

def set_varlabels(self, labels):

self.set_thetagrids(theta * 180/np.pi, labels)

def _gen_axes_patch(self):

verts = unit_poly_verts(theta)

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

def _gen_axes_spines(self):

spine_type = 'circle'

verts = unit_poly_verts(theta)

verts.append(verts[0])

path = Path(verts)

spine = Spine(self, spine_type, path)

spine.set_transform(self.transAxes)

return {'polar': spine}

register_projection(RadarAxes)

return theta

N = len(labels)

theta = _radar_factory(N)

fig = plt.figure()

plt.clf()

ax = fig.add_subplot(1, 1, 1, projection='radar')

ax.plot(theta+(data<0.0)*np.pi, np.abs(data), color='#660066')

ax.set_theta_offset(pi / 1)

ax.set_theta_direction(-1)

ax.set_rlabel_position(90)

ax.set_varlabels(labels)

for label in ax.get_xticklabels()[::2]:

label.set_visible(False)

plt.axvline(theta[event1], color='#660066', linewidth=2, linestyle='dashed')

plt.axvline(theta[event1+st_dev_event1], color='b', linewidth=0.8, linestyle='dashed')

plt.axvline(theta[event1-st_dev_event1], color='b', linewidth=0.8, linestyle='dashed')

plt.show()

fig.clf()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值