Python绘制雷达图

软件测试|如何用Python绘制雷达图 我有朋友问我,他准备买车,预算20-25万,他在考虑几个车,说现在很难做出决定,让我帮他参谋参谋,该买哪个?我只能问,你考虑的是哪几款车?我朋友提出了下列的名单,帕萨特,迈腾,凯美瑞,亚洲龙,天籁,雅阁。说实话,这6款车都不错,是中级车市场的主流车型,没想到这小子混的是真不错。那么我们应该如何提出我们的意见,我们在提出我们的意见之前,需要对各个车型做出对比,选出最符合我朋友要求的车型。 阅读详情

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取

python免费学习资料、代码以及交流解答点击即可加入


 

本篇文章介绍使用matplotlib绘制雷达图。

雷达图也被称为网络图,蜘蛛图,星图,蜘蛛网图,是一个不规则的多边形。雷达图可以形象地展示相同事物的多维指标,应用场景非常多。

一、matplotlib绘制圆形雷达图


# coding=utf-8
import numpy as np
import matplotlib.pyplot as plt


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')
# 设置雷达图的坐标刻度范围
ax.set_rlim(0, 100)
# 设置雷达图的坐标值显示角度,相对于起始角度的偏移量
ax.set_rlabel_position(270)
ax.set_title("计算机专业大一(上)")
plt.legend(["弓长张", "口天吴"], loc='best')
plt.show()

运行结果:

 

 

绘制雷达图需要先建立极坐标系,关于极坐标系可以自己了解一下。建立好极坐标系后可以在极坐标系中绘制折线图、柱状图等,大部分情况,都是用折线图,形成一个不规则的闭合多边形。本文中用某高校大一的期末考试成绩作为例子来演示雷达图的效果。

linspace(): 用于将极坐标系根据数据的维度进行等分,linspace()函数的第一个参数传入起始角度,第二参数传入结束角度,第三个参数传入分成多少等份。其他参数根据需要传入,如endpoint默认为True,最后一个数据处于结束的角度,根据本例中前面的参数0~2π,应该设置为False,否则最后一个数据与第一个数据角度重叠了。

concatenate(): 使雷达图的数据是环形封闭的,concatenate()函数的第一个参数是一个元组,元组中的每个元素是一个数组,concatenate()函数将这些数组连接到一起,组成一个新的数组。要让绘制的雷达图封闭,将数据的第一个值连接到数组的结尾即可。

本文用折线图plot()来绘制雷达图,使用figure()函数设置好图形的大小和清晰度,然后使用subplot()函数来创建一张子图。subplot()函数的第一个参数传入长度为3的数字,第一个数字表示将画布分成几行,第二个数字表示将画布分成几列,第三个数字表示当前的子图处于哪个位置(按从左至右、从上到下的顺序排序),第三个数字不能超出前两个数字切分的子图数范围。如111表示将画布分成一行一列(只有一张子图),当前的子图处于第一张子图中。在subplot()函数中,将polar参数设置成True,得到的图形才是极坐标。

极坐标系设置完成后,使用子图对象ax调用折线图函数plot(),即可绘出雷达图。如果有多组数据,多次调用plot()函数即可。

使用set_thetagrids()方法设置雷达图中每个维度的标签和显示位置。使用set_theta_zero_location()方法设置雷达图的0度位置,可以传入"N"、"NW"、"W"、"SW"、"S"、"SE"、"E"、"NE"八个方位缩写。使用set_rlim()方法设置极坐标上的刻度范围。使用set_rlabel_position()方法设置极坐标上的刻度标签显示位置,传入一个相对于雷达图0度的角度值。当然还可以根据需要设置其他属性,如标题、图例等。

在上面的例子中,将两位同学的考试成绩绘制成了雷达图,通过雷达图,可以看出两个人的单科成绩互有高低,而整体来看,两位同学的成绩都很优秀。上面的雷达图中,网格线都是圆形的,而用折线图连接的雷达图两个维度之间是直线连接的,所以将网格线换成多边形会更合理一点。

二、matplotlib绘制多边形雷达图


import numpy as np
import matplotlib.pyplot as plt


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):
    for j in np.arange(0, 100+20, 20):
        ax[i].plot(angles, 6*[j], '-.', lw=0.5, color='black')
    for j in range(5):
        ax[i].plot([angles[j], angles[j]], [0, 100], '-.', lw=0.5, color='black')
    ax[i].plot(angles, data[i], color='b')
    # 隐藏最外圈的圆
    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()

运行结果:

 

 

在极坐标系中,极径值相等的点在一个圆上,所以绘制的雷达图中,网格线默认都是圆形的。如果要绘制多边形的雷达图,则需要将圆形的网格线隐藏,然后根据刻度范围绘制出多边形的网格线。

首先使用plot()函数,根据刻度范围,绘制出同心的多个多边形和多个维度方向的极轴,作为雷达图的网格线,形成一张“网”。

链式调用极坐标的spines['polar'].set_visible()方法,传入参数False,将极坐标系最外圈的圆形隐藏。调用grid()方法,传入参数False,将极坐标系中的的圆形网格线隐藏。

修改完网格线后,即可达到多边形的效果。在第二次绘制雷达图时,将两位同学的成绩分到两张不同的雷达图中,并用text()方法设置了每个维度的数据标注,使用fig对象的suptitle()方法来设置整张图形的标题。

上面的两次绘图,将两位同学的成绩绘制在同一张雷达图时,更方便对比两位同学的成绩,如比较谁更全面、更优秀。分开绘制时,更方便分析个人的成绩情况,如是否偏科。而相对于圆形的雷达图,在多边形的雷达图中,不会出现雷达图与网格线的不合理交叉(雷达图与网格线交叉两次),使用多边形网格线更合理。

python绘制雷达图(详细) 雷达图介绍 雷达图是以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法。轴的相对位置和角度通常是无信息的。 雷达图也称为网络图,蜘蛛图,星图,蜘蛛网图,不规则多边形,极坐标图或Kiviat图。它相当于平行坐标图,轴径向排列。【搜狗百科】 雷达图通常用于综合分析多个指标,具有完整,清晰和直观的优点。 下面用实现用python制作雷达图的方法和过程: 雷达图制作 定义标准化函数 from numpy import array from sklearn import prep 阅读详情

相关推荐

软件测试|使用Python绘制雷达图(二)

之前我们用matplotlib绘制了雷达图,可能代码量会相对多一些,今天我想起了我们之前介绍过的pyecharts,这个绘图神器,也是支持绘制雷达图的,今天我们来看看实现起来会不会更简单。我们还是以买车的朋友选择来作为我们的数据进行绘制。本文主要介绍了使用pyecharts绘制雷达图的方法,相比于matplotlib,pyecharts更加方便一些,对于不同对象的对比更为方便,可以隐藏部分对象,同时,可以对不同维度设置不同的范围,对于差距较小的维度,可以展示出更微小直观的差距。更多技术文章。

Tester_muller的博客 4167

使用python简单绘制雷达图

使用python简单绘制雷达图

weixin_45972980的博客 1万+

利用Python绘制特征雷达图

绘制特征雷达图主要有3个部分,首先是对现有数据进行清洗处理,然后对处理的数据进行计算,最后用计算的数据绘制特征雷达图。 这次我们主要的内容是绘制特征雷达图,所以数据进行清洗处理和数据进行计算就不进行说明了,主要说明用处理好的数据用python绘制特征雷达图。处理好的数据如下所示: 上标、下标、特征值和标准值都以确定,目前就用python来绘制特征雷达图。本次绘制特征雷达图用到的python库为matplotlib库,用pandas读入数据后,在同一个fig上绘制绘制上标、下标、特征值和标准值,最后输出结果

qq_41905937的博客 3191

python绘制雷达图

雷达图(Radar Chart),也被称为蛛网图(Spider Chart)或极坐标图,是一种用于展示多个维度的数据分布的图表。它的主要特点是在一个圆形的坐标系上,通过多个半径相连的数据点来表示不同的数据维度,形成一种类似蜘蛛网的图形。每个维度对应一个角度,而半径的长度表示该维度的数值。应用场景:1、比较多个维度: 雷达图适用于比较多个维度的数据,特别是在各个维度上的数据差异较大时,可以直观地看出各维度之间的差异。2、综合评价: 用于综合评价多个因素对一个目标的影响,例如产品的各个性能指标综合评估。

pengbr的博客 5442

使用Python绘制雷达图的简单示例

雷达图(Radar Chart)也被称为蜘蛛网图、星形图或极坐标图,是一种用于显示多变量数据的图形方法。它以一个中心点为起点,从中心点向外延伸出多条射线,每条射线代表一个特定的变量或指标。每条射线上的点或线段表示该变量在不同维度上的取值或得分。雷达图常用于比较多个变量在不同维度上的表现,以及展示各个变量之间的相对关系。通过观察雷达图的形状和变化,可以直观地了解各个变量的相对重要性、差异程度和趋势。它被广泛应用于数据分析、数据可视化、商业分析等领域。

python收藏家的博客 2117

可视化:python绘制多组多维数据雷达图

超过3维的数据用雷达图可以十分直观地展示。本文实践过程中以灰度共生矩阵的4项常用指标为例。 python绘制多组多维数据雷达图 所使用的数据如下所示:每一行是一个样本,每个样本有4维特征(列)。 封装一个雷达图的绘图方法: import numpy as np import matplotlib.pyplot as plt from matplotlib import font_m...

Yancy的博客 1万+

【Python】绘制雷达图

之前在一些数据分析案例中看到用 Go 语言绘制的雷达图,非常的漂亮,就想着用matlibplot.pyplot也照着画一个,遗憾的是matlibplot.pyplot模块中没有直接绘制雷达图的函数,不过可以基于‘polar’图形特征来改进,下面就记录一下如何绘制雷达图。 import numpy as np import matplotlib.pyplot as plt # 用于正常显示中文...

张欣的博客 4万+

手把手教你用VM实现欧姆龙PLC数据采集(含Fins协议配置详解)

本文详细介绍了如何使用VM(VisionMaster)实现与欧姆龙PLC的数据采集,重点解析了Fins协议(包括Fins TCP/UDP)的配置步骤。从网络环境搭建、PLC的IP地址设置,到VM端Fins通讯通道的详细配置与数据点映射,提供了完整的实战指南。文章还涵盖了数据收发解析、常见问题排查清单,帮助工程师快速完成视觉系统与PLC的稳定集成。

weixin_29171087的博客 189

Python matplotlib绘制雷达图

Python matplotlib绘制雷达图

weixin_43790276的博客 2万+

超级详细!!!新手使用AutoDL跑深度学习(MixVPR项目)的学习记录

新手第一次在AutoDL上跑深度学习的实验,遇到一些问题,简单记录一下。如果大家发现问题,欢迎和我讨论。

weixin_45152283的博客 5万+

决策树简介/PPT

最近给我们组新生讲了决策树的相关知识,以下是所做的PPT,参考了网络资源。

垃圾就应该待在垃圾桶里的博客 3796

[python] 基于matplotlib实现雷达图的绘制

雷达图(也称为蜘蛛图或星形图)是一种可视化视图,用于使用一致的比例尺显示三个或更多维度上的多元数据。并非每个人都是雷达图的忠实拥护者,但我认为雷达图能够以视觉上吸引人的方式比较不同类别各个特征的值。本文主要讲述通过matplotlib绘制雷达图。本文所有代码见:Python-Study-Notes # 去掉警告 import warnings warnings.filterwarnings("ignore") # 多行输出 from IPython.core.interactiveshell import

You and Me 1万+

⭐️白嫖的阿里云认证⭐️ 【真题&参考答案】:大模型Clouder认证:利用大模型提升内容生产能力

【摘要】真题「大模型Clouder认证:利用大模型提升内容生产能力」

davidkorhenn的博客 1925

比较(二)利用python绘制雷达图

利用python绘制雷达图

微信知乎搜索HsuHeinrich 2105

基于Qwen3-14B大模型的智能UI自动化测试实践

UI自动化测试是软件工程中保障产品质量的关键环节,其核心原理是通过脚本模拟用户操作,对软件界面进行功能验证。传统方法依赖于编写和维护基于元素定位的固定规则脚本,在面对复杂交互或频繁变化的界面时,维护成本高昂。大语言模型(LLM)的出现为这一领域带来了新的技术价值,其强大的自然语言理解和代码生成能力,使得测试脚本的编写从精确编码转向了任务描述。通过将大模型作为决策大脑,结合Playwright等自动化工具作为执行器,可以构建出能够理解界面、规划操作并验证结果的智能测试系统。这种方案特别适用于处理变化频繁、逻辑

weixin_42619742的博客 303

NHANES更新数据后,权重计算方式也更新了

官网说明在此:如果你比我还懒,我下载了几个说明文件。2021年8月至2023年8月的总样本量与之前的2年周期相似。然而,。特别是,与之前包括过度抽样的周期相比,非西班牙裔白人的样本量较高,而非西班牙裔黑人的样本量较低。此外,60岁及以上人群的样本量较高,而年轻群体的样本量较低。子组的估计值可能具有较低的精确度,因此,检测组间差异的统计能力可能较低。此外,年龄和种族/西班牙裔亚组(尤其是儿童和青少年年龄组)的估计值可能会显示意想不到的模式。

珏世佳人的博客 2410

python制作雷达图_如何利用Python matplotlib绘制雷达图

本篇文章介绍使用matplotlib绘制雷达图。雷达图也被称为网络图,蜘蛛图,星图,蜘蛛网图,是一个不规则的多边形。雷达图可以形象地展示相同事物的多维指标,雷达图几乎随处可见,应用场景非常多。一、matplotlib绘制圆形雷达图# coding=utf-8import numpy as npimport matplotlib.pyplot as pltresults = [{"大学英语": 87...

weixin_34180452的博客 1372

华为OD机试 新系统真题-收集灵草(Java/Py/C++/Go/C/Js)

华为OD机试 新系统真题【收集灵草】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【收集灵草】多语言题解。

qq_45776114的博客 549

chatgpt赋能python:Python多级雷达图绘制解析

多级雷达图是一种扩展的雷达图,它将雷达图中的每一个维度进一步拆分,形成多个小的维度。当然,在展示时,它们仍然按照雷达图一样,被绘制成多边形。多级雷达图的好处在于,它能够使维度层次化,在同一维度上进行分组展示,使图表更加具有可读性和易于理解性。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。

「 虚幻私塾」 941

uniapp(全端兼容) - 最新实现全局设置修改字体大小功能,统一修改全部页面所有文字的大小(标准/小/中/大字号切换,用户修改后整个项目立即生效)设置应用字体的大小(详细示例代码,一键复制开箱即用

uni-app,支付宝微信小程序,h5,手机端H5网页,移动端网站,安卓app,ios苹果app,nvue,全局设置字体大小,退出后还能记录字号大小,uniApp将全部页面的字体字号进行修改,uniapp设置改变全局字体大小功能,动态调整应用字体大小,详细教程,动态显示字体大小,可调整显示字体大小,如何解决不同端字体大小的问题,除了rem还有什么方法,设置全局字体大小,用户设置字号大小,应用字体大中小,实现用户全局设置应用字体大小,老年模式字体设置思路,h5端不行怎么办,移动端不生效,修改全局字号,一键改整

✅ 精选推荐文章 8885

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

绘制多个折线图_Python matplotlib绘制雷达图

本篇文章介绍使用matplotlib绘制雷达图。雷达图也被称为网络图,蜘蛛图,星图,蜘蛛网图,是一个不规则的多边形。雷达图可以形象地展示相同事物的多维指标,应用场景非常多。一、matplotlib绘制圆形雷达图# coding=utf-8import numpy as npimport matplotlib.pyplot as pltresults = [{"大学英语": 87, "高等...

weixin_34051133的博客 519

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

python雷达图怎么做_PYTHON绘制雷达图代码实例

这篇文章主要介绍了PYTHON绘制雷达图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下1、雷达图import matplotlib.pyplot as pltimport numpy as npvalues = [0.09,-0.05,0.20,-0.02,0.08,0.09,0.03,0.027]x = np.linspace(0,2*...

weixin_39782752的博客 221

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 用原生的方式操作Excel,Python玩转Excel神器xlsxwriter详解!
下一篇: Python|快速掌握Python爬虫XPath语法
酸菜鱼编程
博客等级 码龄6年 155粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值