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简单程序读取串口信息的方法
Mar 13 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
python中urllib.unquote乱码的原因与解决方法
Apr 24 Python
django项目运行因中文而乱码报错的几种情况解决
Nov 07 Python
Python格式化日期时间操作示例
Jun 28 Python
解决python xlrd无法读取excel文件的问题
Dec 25 Python
Python实现Mysql数据统计及numpy统计函数
Jul 15 Python
Python中bisect的使用方法
Dec 31 Python
python3中TQDM库安装及使用详解
Nov 18 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 Python
python UIAutomator2使用超详细教程
Feb 19 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 15 Python
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
python创建字典及相关管理操作
python微信智能AI机器人实现多种支付方式
Python中request的基本使用解决乱码问题
Apr 12 #Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Python安装使用Scrapy框架
You might like
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
2013/08/06 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
vue实现分页组件
2020/06/16 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
python实现加密的方式总结
2020/01/19 Python
python switch 实现多分支选择功能
2020/12/21 Python
奶茶店创业计划书范文
2014/01/17 职场文书
留学推荐信中文范文三篇
2014/01/25 职场文书
爬山的活动方案
2014/08/16 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
初中班干部工作总结
2015/08/10 职场文书
SQL之各种join小结详细讲解
2021/08/04 MySQL
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫