Python matplotlib绘制雷达图


Posted in Python onApril 13, 2022

介绍

雷达图是以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法。轴的相对位置和角度通常是无信息的。 雷达图也称为网络图,蜘蛛图,星图,蜘蛛网图,不规则多边形,极坐标图或Kiviat图。它相当于平行坐标图,轴径向排列。

应用场景

用于成绩的透视,比如查看你是否偏科,知晓你的兴趣偏向于哪一方面

Python matplotlib绘制雷达图

案例一(成绩雷达图重叠)

# coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']     #显示中文
plt.rcParams['axes.unicode_minus']=False       #正常显示负号
 
results = [
    {"大学英语": 87, "高等数学": 79, "体育": 95, "计算机基础": 92, "程序设计": 85},
    {"大学英语": 80, "高等数学": 90, "体育": 91, "计算机基础": 85, "程序设计": 88}
]
data_length = len(results[0])
# 将极坐标根据数据长度进行等分
angles = np.linspace(0, 2*np.pi, data_length, endpoint=False)
labels = [key for key in results[0].keys()]
score = [[v for v in result.values()] for result in results]
# 使雷达图数据封闭
score_a = np.concatenate((score[0], [score[0][0]]))
score_b = np.concatenate((score[1], [score[1][0]]))
angles = np.concatenate((angles, [angles[0]]))
labels = np.concatenate((labels, [labels[0]]))
# 设置图形的大小
fig = plt.figure(figsize=(8, 6), dpi=100)
# 新建一个子图
ax = plt.subplot(111, polar=True)
# 绘制雷达图
ax.plot(angles, score_a, color='g')
ax.plot(angles, score_b, color='b')
# 设置雷达图中每一项的标签显示
ax.set_thetagrids(angles*180/np.pi, labels)
# 设置雷达图的0度起始位置
ax.set_theta_zero_location('N')  # E W S N SW SE NW NE
# 设置雷达图的坐标刻度范围
ax.set_rlim(0, 100)
# 设置雷达图的坐标值显示角度,相对于                                                                                                                                                                                                                                                                                                                                                                                            y               起始角度的偏移量
ax.set_rlabel_position(270)
ax.set_title("成绩对比")
plt.legend(["张三", "李四"], loc='best')
plt.show()

Python matplotlib绘制雷达图

案例二(成绩雷达图左右图)

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']     #显示中文
plt.rcParams['axes.unicode_minus']=False       #正常显示负号
 
results = [{"大学英语": 87, "高等数学": 79, "体育": 95, "计算机基础": 92, "程序设计": 85},
   {"大学英语": 80, "高等数学": 90, "体育": 91, "计算机基础": 85, "程序设计": 88}]
data_length = len(results[0])
angles = np.linspace(0, 2*np.pi, data_length, endpoint=False)
labels = [key for key in results[0].keys()]
score = [[v for v in result.values()] for result in results]
score_a = np.concatenate((score[0], [score[0][0]]))  # 将每个数组的第一个元素添加到末尾,首尾相连
score_b = np.concatenate((score[1], [score[1][0]]))  # 将每个数组的第一个元素添加到末尾,首尾相连
angles = np.concatenate((angles, [angles[0]]))
labels = np.concatenate((labels, [labels[0]]))
fig = plt.figure(figsize=(10, 6), dpi=100)
fig.suptitle("成绩对比")
ax1 = plt.subplot(121, polar=True)
ax2 = plt.subplot(122, polar=True)
ax, data, name = [ax1, ax2], [score_a, score_b], ["张三", "李四"]
for i in range(2):  # 0:左图 张三,1:右图 李四
    for j in np.arange(0, 100+20, 20):
        ax[i].plot(angles, 6*[j], '-.', lw=0.5, color='#123456')  # 画五边形框,lw=linewidth
    for j in range(5):
        ax[i].plot([angles[j], angles[j]], [0, 100], ':', lw=0.7, color='green')  # 画5条半径线,每个角度连接圆心0和顶点100
        ax[i].plot(angles, data[i], color='b')   # 在极坐标下画成绩折线图
        ax[i].fill(angles, data[i],color='#B34543',alpha=0.1)
        ax[i].spines['polar'].set_visible(False)  # 隐藏最外圈的圆
         # 隐藏圆形网格线
        ax[i].grid(False)
    for a, b in zip(angles, data[i]):
        ax[i].text(a, b+5, '%.00f' % b, ha='center', va='center', fontsize=12, color='b')
        ax[i].set_thetagrids(angles*180/np.pi, labels)
        ax[i].set_theta_zero_location('N')
        ax[i].set_rlim(0, 100)
        ax[i].set_rlabel_position(0)
        ax[i].set_title(name[i])
plt.show()

Python matplotlib绘制雷达图

极坐标

import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(10,5))  # 设置画布
 
ax1 = plt.subplot(121, projection='polar')  # 左图: projection='polar' 表示极坐标系
ax2 = plt.subplot(122)                      # 右图: 默认是直角坐标系
 
x = np.linspace(0,2*np.pi,9)   # 0 - 2Π 平均划分成9个点 [0,1/4,1/2,3/4,1,5/4/,3/2,7/4,2]  0pi = 2pi
y = np.random.random(9)*10        # 随机9个值
y[-1] = y[0]                      # 首位相连
 
ax1.plot(x,y,marker='.')    # 画左图(ax1)  极坐标 (x表示角度,y表示半径)
ax2.plot(x,y,marker='.')    # 画右图(ax2)直角坐标 (x表示横轴,y表示纵轴)
 
ax1.fill(x,y,alpha=0.3)
ax2.fill(x,y,alpha=0.3)
 
plt.show()

Python matplotlib绘制雷达图

 到此这篇关于matplotlib绘制雷达图的基本配置(万能模板案例)的文章就介绍到这了!

Python 相关文章推荐
Python多进程同步简单实现代码
Apr 27 Python
Django自定义分页与bootstrap分页结合
Feb 22 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
Oct 29 Python
关于PyTorch 自动求导机制详解
Aug 18 Python
基于Python实现拆分和合并GIF动态图
Oct 22 Python
Django 请求Request的具体使用方法
Nov 11 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
Apr 20 Python
Numpy中的数组搜索中np.where方法详细介绍
Jan 08 Python
python数据抓取3种方法总结
Feb 07 Python
python操作xlsx格式文件并读取
Jun 02 Python
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
python创建字典及相关管理操作
python微信智能AI机器人实现多种支付方式
Python中request的基本使用解决乱码问题
Apr 12 #Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Python安装使用Scrapy框架
You might like
PHP实现多条件查询实例代码
2010/07/17 PHP
php从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
如何提高数据访问速度
2016/12/26 Javascript
几种tab切换详解
2017/02/03 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
详解Python中heapq模块的用法
2016/06/28 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
给我一面国旗 python帮你实现
2019/09/30 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
婴儿地球:Baby Earth
2018/12/25 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
服装设计专业毕业生求职信
2014/04/09 职场文书
小学生暑假家长评语
2014/04/17 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL