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中Collection的使用小技巧
Aug 18 Python
Python实现检测服务器是否可以ping通的2种方法
Jan 01 Python
pymongo给mongodb创建索引的简单实现方法
May 06 Python
Python中用altzone()方法处理时区的教程
May 22 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
对Python中的@classmethod用法详解
Apr 21 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
Oct 21 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
对python中assert、isinstance的用法详解
Nov 27 Python
python函数定义和调用过程详解
Feb 09 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
Dec 08 Python
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
python创建字典及相关管理操作
python微信智能AI机器人实现多种支付方式
Python中request的基本使用解决乱码问题
Apr 12 #Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Python安装使用Scrapy框架
You might like
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
javascript 限制输入脚本大全
2009/11/03 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
python获取糗百图片代码实例
2013/12/18 Python
python轻松实现代码编码格式转换
2015/03/26 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
Python 类的特殊成员解析
2018/06/20 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
python读取和保存图片5种方法对比
2018/09/12 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
python实现列表的排序方法分享
2019/07/01 Python
django的ORM操作 增加和查询
2019/07/26 Python
Python和Sublime整合过程图示
2019/12/25 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
院药学专业个人求职信
2013/09/21 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
预备党员表决心的话
2015/09/22 职场文书