软件测试|如何用Python绘制雷达图

简介: 软件测试|如何用Python绘制雷达图

前言

我有朋友问我,他准备买车,预算20-25万,他在考虑几个车,说现在很难做出决定,让我帮他参谋参谋,该买哪个?
我只能问,你考虑的是哪几款车?
我朋友提出了下列的名单,帕萨特,迈腾,凯美瑞,亚洲龙,天籁,雅阁。
说实话,这6款车都不错,是中级车市场的主流车型,没想到这小子混的是真不错。
那么我们应该如何提出我们的意见,我们在提出我们的意见之前,需要对各个车型做出对比,选出最符合我朋友要求的车型。那么指标这么多,我们要如何更直观的展示出来各个车型的优缺点,更便于他去选择,我决定绘制一个雷达图来给他展示这些各个车型的优缺点。

数据准备

选择买哪款车,我们主要考虑的有如下指标:舒适性,油耗,性能,安全,操控,这就开始干,根据我们在汽车之家上查到的数据给各个车型赋予分数,如下:

# 分别为帕萨特,迈腾,凯美瑞,亚洲龙,天籁,雅阁
stats = [
    {"舒适性": 85, "油耗": 75, "性能": 90, "安全": 70, "操控": 90},
    {"舒适性": 87, "油耗": 72, "性能": 95, "安全": 75, "操控": 95},
    {"舒适性": 80, "油耗": 95, "性能": 70, "安全": 85, "操控": 80},
    {"舒适性": 85, "油耗": 90, "性能": 75, "安全": 85, "操控": 75},
    {"舒适性": 85, "油耗": 85, "性能": 80, "安全": 80, "操控": 85},
    {"舒适性": 75, "油耗": 90, "性能": 82, "安全": 85, "操控": 88},

]

绘制单车型雷达图

我们先绘制出单个车型的雷达图,比如我们要先绘制帕萨特的雷达图,我们的代码如下:

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

stats = [
    {"舒适性": 85, "油耗": 75, "性能": 90, "安全": 70, "操控": 90},
    {"舒适性": 87, "油耗": 72, "性能": 95, "安全": 75, "操控": 95},
    {"舒适性": 80, "油耗": 95, "性能": 70, "安全": 85, "操控": 80},
    {"舒适性": 85, "油耗": 90, "性能": 75, "安全": 85, "操控": 75},
    {"舒适性": 85, "油耗": 85, "性能": 80, "安全": 80, "操控": 85},
    {"舒适性": 75, "油耗": 90, "性能": 82, "安全": 85, "操控": 88},

]
data_length = len(stats[0])
# 将极坐标根据数据长度进行等分
angles = np.linspace(0, 2 * np.pi, data_length, endpoint=False)
labels = [key for key in stats[0].keys()]
score = [[v for v in stat.values()] for stat in stats]
# 使雷达图数据封闭
score_a = np.concatenate((score[0], [score[0][0]]))
angles = np.concatenate((angles, [angles[0]]))
labels = np.concatenate((labels, [labels[0]]))
# 设置图形的大小
fig = plt.figure(figsize=(9, 9), dpi=100)
# 新建一个子图
ax = plt.subplot(111, polar=True)
# 绘制雷达图
ax.plot(angles, score_a, color='g')
# 设置雷达图中每一项的标签显示
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()

绘制出的雷达图如下所示:

在这里插入图片描述

绘制全车型的雷达图

上方绘制单车型的雷达图我们可以知道,我们只读取了一个车型的数据,并且只绘制了一个车型的数据,我们现在要绘制上述6个车型的雷达图,需要读取全部6个车型的数据,并且绘制6个车型的雷达图,代码如下:

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

stats = [
    {"舒适性": 85, "油耗": 75, "性能": 90, "安全": 70, "操控": 90},
    {"舒适性": 87, "油耗": 72, "性能": 95, "安全": 75, "操控": 95},
    {"舒适性": 80, "油耗": 95, "性能": 70, "安全": 85, "操控": 80},
    {"舒适性": 85, "油耗": 90, "性能": 75, "安全": 85, "操控": 75},
    {"舒适性": 85, "油耗": 85, "性能": 80, "安全": 80, "操控": 85},
    {"舒适性": 75, "油耗": 90, "性能": 82, "安全": 85, "操控": 88},

]
data_length = len(stats[0])
# 将极坐标根据数据长度进行等分
angles = np.linspace(0, 2 * np.pi, data_length, endpoint=False)
labels = [key for key in stats[0].keys()]
score = [[v for v in stat.values()] for stat in stats]
# 使雷达图数据封闭
score_a = np.concatenate((score[0], [score[0][0]]))
score_b = np.concatenate((score[1], [score[1][0]]))
score_c = np.concatenate((score[2], [score[2][0]]))
score_d = np.concatenate((score[3], [score[3][0]]))
score_e = np.concatenate((score[4], [score[4][0]]))
score_f = np.concatenate((score[5], [score[5][0]]))
angles = np.concatenate((angles, [angles[0]]))
labels = np.concatenate((labels, [labels[0]]))
# 设置图形的大小
fig = plt.figure(figsize=(9, 9), dpi=100)
# 新建一个子图
ax = plt.subplot(111, polar=True)
# 绘制雷达图
ax.plot(angles, score_a, color='g')
ax.plot(angles, score_b, color='b')
ax.plot(angles, score_c, color='c')
ax.plot(angles, score_d, color='m')
ax.plot(angles, score_e, color='y')
ax.plot(angles, score_f, color='r')

# 设置雷达图中每一项的标签显示
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()

绘制的图像如下:

在这里插入图片描述

进一步优化

我们可以看到,上面绘制的雷达图,存在线条过于紧密的问题,让人眼花缭乱,我们能不能使得绘制的图不再那么紧密,显而易见,没有哪款车型的某项得分在65分以下,我们是否可以将刻度从65分开始呢,答案是可以的,我们只需要修改一下这一行代码即可,代码如下:

# 设置雷达图的坐标刻度范围
ax.set_rlim(65, 100)

修改代码后重新绘制的雷达图如下:

在这里插入图片描述
我们可以看到,不同车型的差距变的更直观许多。

总结

我们本篇文章主要借着替我朋友分析买哪款车好的契机,向大家介绍了使用matplotlib绘制雷达图的方法,包括对于雷达图的优化,下一篇文章,我们将介绍使用pyecharts库来绘制雷达图,看看是否会更加便捷。最后,我朋友家拆迁了,并没有买这么便宜的车型,他直接买了我的梦想——保时捷帕纳梅拉。

相关文章
|
6天前
|
Web App开发 测试技术 持续交付
自动化测试的利器:Selenium与Python的完美结合
【9月更文挑战第21天】在软件开发的世界里,测试是确保产品质量的关键步骤。随着敏捷开发和持续集成的流行,自动化测试工具变得尤为重要。本文将介绍如何使用Selenium和Python进行高效的自动化测试,不仅提供代码示例,还深入探讨如何设计测试用例、选择正确的测试框架、以及如何整合到CI/CD流程中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
21 3
|
18天前
|
安全 JavaScript 前端开发
自动化测试的魔法:如何用Python编写你的第一个测试脚本
【8月更文挑战第41天】在软件的世界里,质量是王道。而自动化测试,就像是维护这个王国的骑士,确保我们的软件产品坚不可摧。本文将引导你进入自动化测试的奇妙世界,教你如何使用Python这把强大的魔法杖,编写出能够守护你代码安全的第一道防护咒语。让我们一起开启这场魔法之旅吧!
|
24天前
|
测试技术 持续交付 Apache
性能测试不再愁!Python+JMeter+Locust,三步打造高性能应用
【9月更文挑战第4天】随着互联网的发展,软件性能成为衡量应用成功的关键。性能测试确保应用稳定高效运行,但复杂环境和多样需求带来了挑战。Python、JMeter和Locust三款工具可构建高效全面的性能测试方案。Python语法简洁,库丰富;JMeter提供图形界面,支持多种协议;Locust基于Python,简单易用且高度可扩展。结合三者,能满足复杂需求,保证灵活性与高效性。无论初学者还是资深工程师,都能确保应用高性能运行。
26 1
|
28天前
|
Web App开发 测试技术 API
自动化测试之美:使用Selenium和Python进行Web应用测试
【8月更文挑战第31天】在软件开发的快节奏世界中,自动化测试如同一束明灯,照亮了质量保证之路。本文将引导你通过Selenium和Python的强大组合,探索如何构建高效的Web应用测试框架。我们不仅会讨论理论,还会深入代码,从一个简单的示例开始,逐步扩展至更复杂的场景。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。让我们一同揭开自动化测试的神秘面纱,体验它的魅力所在。
|
28天前
|
Web App开发 XML 测试技术
自动化测试框架设计:以Python和Selenium为例
【8月更文挑战第31天】在软件开发的快节奏中,自动化测试成为确保产品质量的关键步骤。本文将引导读者了解如何结合Python语言和Selenium工具来设计一个高效的自动化测试框架。通过浅显易懂的语言和实际代码示例,我们将探索自动化测试框架的核心组件,并学习如何实现它们。无论你是测试新手还是希望提升自动化技能的开发者,这篇文章都将为你打开一扇通向高效软件测试的大门。
|
1月前
|
敏捷开发 测试技术 数据安全/隐私保护
自动化测试的高效之路:如何利用Python和Selenium提升测试效率
【8月更文挑战第28天】本文旨在探讨通过Python语言结合Selenium框架来提高软件测试的效率。文章不仅介绍了自动化测试的基本概念,还提供了具体的代码示例,帮助读者理解如何实现自动化测试脚本,并指出了在实施过程中可能遇到的问题及其解决方案。通过本文,读者将学会如何有效地使用Python和Selenium工具,以减少重复性工作,提升测试流程的效率与准确性。
|
1月前
|
Web App开发 测试技术 持续交付
自动化测试之美:如何利用Selenium和Python提升测试效率
【8月更文挑战第27天】在软件开发的海洋中,自动化测试犹如一艘高速航行的帆船,让质量保证的过程更加迅速而精准。本文将引导你了解如何结合Selenium和Python这两大利器,构建强大的自动化测试框架,从而显著提升测试工作的效率和效果。通过深入浅出的讲解,我们不仅会探索这两个工具的基本使用方法,还会学习如何设计高效的测试用例,以及如何处理测试过程中遇到的各种问题。无论你是测试新手还是希望提高测试技能的开发者,这篇文章都将为你打开一扇通往更高效测试世界的大门。
|
14天前
|
敏捷开发 测试技术 持续交付
自动化测试之美:如何用Selenium和Python打造高效测试脚本
【9月更文挑战第13天】在软件开发的海洋中,自动化测试是那抹不可或缺的亮色。它不仅提升了测试效率,还保障了产品质量。本文将带你领略使用Selenium和Python构建自动化测试脚本的魅力所在,从环境的搭建到脚本的编写,再到问题的排查,每一步都是对软件质量把控的深刻理解和实践。让我们开始这段探索之旅,解锁自动化测试的秘密吧!
13 0
|
14天前
|
jenkins 测试技术 持续交付
自动化测试的高效之路:如何利用Python进行Web应用测试
【9月更文挑战第13天】在软件开发的快节奏中,自动化测试是确保质量和效率的关键。本文将引导你了解如何使用Python语言及其强大的测试框架来提升Web应用的测试效率。我们将一起探索编写简洁而强大的测试脚本的技巧,以及如何通过持续集成(CI)实现自动化测试流程。准备好让你的测试工作飞一般的感觉!
|
27天前
|
安全 JavaScript 前端开发
自动化测试的魔法:如何用Python编写你的第一个测试脚本
【8月更文挑战第31天】 在软件的世界里,质量是王道。而自动化测试,就像是维护这个王国的骑士,确保我们的软件产品坚不可摧。本文将引导你进入自动化测试的奇妙世界,教你如何使用Python这把强大的魔法杖,编写出能够守护你代码安全的第一道防护咒语。让我们一起开启这场魔法之旅吧!