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-嵌套列表list的全面解析
Jun 08 Python
深入浅析python中的多进程、多线程、协程
Jun 22 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
浅析python参数的知识点
Dec 10 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
Dec 21 Python
如何使用Flask-Migrate拓展数据库表结构
Jul 24 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
Python实现寻找回文数字过程解析
Jun 09 Python
Python浮点型(float)运算结果不正确的解决方案
Sep 22 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
Django框架实现在线考试系统的示例代码
Nov 30 Python
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
python创建字典及相关管理操作
python微信智能AI机器人实现多种支付方式
Python中request的基本使用解决乱码问题
Apr 12 #Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Python安装使用Scrapy框架
You might like
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
PHP4(windows版本)中的COM函数
2006/10/09 PHP
一些关于PHP的知识
2006/11/17 PHP
PHP中的日期及时间
2006/11/23 PHP
PHP生成指定长度随机数最简洁的方法
2014/07/14 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
python删除特定文件的方法
2015/07/30 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
python3获取当前目录的实现方法
2019/07/29 Python
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
公司门卫岗位职责
2014/03/15 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
青奥会口号
2014/06/12 职场文书
讲座开场白台词和结束语
2015/05/29 职场文书
宣传稿格式范文
2015/07/23 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书