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

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

一、matplotlib绘制圆形雷达图

# coding=utf-8
import numpy as np
import matplotlib.pyplot as pltresults = [{"大学英语": 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 pltresults = [{"大学英语": 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基础教程形的雷达图,在多边形的雷达图中,不会出现雷达图与网格线的不合理交叉(雷达图与网格线交叉两次),使用多边形网格线更合理。

Python绘制雷达图相关推荐

  1. python话雷达图-PYTHON绘制雷达图代码实例

    这篇文章主要介绍了PYTHON绘制雷达图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.雷达图 import matplotlib.py ...

  2. python绘制雷达图代码实例-PYTHON绘制雷达图代码实例

    这篇文章主要介绍了PYTHON绘制雷达图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.雷达图 import matplotlib.py ...

  3. python画出的雷达图效果-PYTHON绘制雷达图代码实例

    这篇文章主要介绍了PYTHON绘制雷达图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.雷达图 import matplotlib.py ...

  4. python绘制雷达图代码实例-使用python绘制温度变化雷达图

    本文实例为大家分享了python绘制温度变化雷达图的具体代码,供大家参考,具体内容如下 假设某天某地每三个小时取样的气温为 针对温度变化趋势绘制雷达图: 代码如下: import numpy as n ...

  5. python绘制雷达图代码实例-python处理excel绘制雷达图

    本文实例为大家分享了python处理excel绘制雷达图的具体代码,供大家参考,具体内容如下 python处理excel制成雷达图,利用工具plotly在线生成,事先要安装好xlrd组件 代码: im ...

  6. 应用Python绘制雷达图时遇到的坑

    ValueError: The number of FixedLocator locations (9), usually from a call to set_ticks, does not mat ...

  7. python绘制雷达图(详细)

    雷达图介绍 雷达图是以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法.轴的相对位置和角度通常是无信息的. 雷达图也称为网络图,蜘蛛图,星图,蜘蛛网图,不规则多边形 ...

  8. python话雷达图-使用Python绘制雷达图

    假设某天某地每三个小时取样的气温为 0时 3时 6时 9时 12时 15时 18时 21时 24时 3℃ 5℃ 6℃ 3℃ 1℃ 3℃ 3℃ 2℃ 3℃ 针对温度变化趋势绘制雷达图: 代码如下: im ...

  9. python绘制雷达图-使用Python绘制雷达图

    假设某天某地每三个小时取样的气温为 0时3时6时9时12时15时18时21时24时3℃5℃6℃3℃1℃3℃3℃2℃3℃ 针对温度变化趋势绘制雷达图: 代码如下: import numpy as np ...

最新文章

  1. Hi3516A开发--RTC电路
  2. linux 环境变量 term,linux – TERM环境变量未设置
  3. JavaScript中的面向对象(1):对象创建模式
  4. 硬核推导Google AdaFactor:一个省显存的宝藏优化器
  5. 中国双色向滤光镜行业市场供需与战略研究报告
  6. rosweb,roslib:bug汇总。报Warning: Invalid argument “/map“ passed to canTransform
  7. JAVA 对于点号.的处理
  8. Android沉浸式(侵入式)标题栏(状态栏)Status(三)
  9. POJ 1635 树的最小表示法
  10. ubuntu linux多声卡设置默认声卡shell指令
  11. 免费获取卫星影像的网站你知道几个?
  12. python项目实战:天眼查询你所需的公司信息
  13. 设置oracle sys密码修改,Oracle修改SYS密码
  14. 恶意软件隐身术:把可执行文件隐藏在注册表里
  15. 功能测试 —— TPShop商城项目
  16. mysql数据库西里尔文乱码_使用Python从MySQL读取西里尔文utf8符号不正确
  17. Jzoj5236 利普希茨
  18. 几个炫酷的3D旋转动态效果(附代码)
  19. 2021.10.8 车辆自适应巡航关键控制算法研究
  20. invoker 祈求者 c++ 题解

热门文章

  1. 文本分类(二) | (2) 程序入口
  2. 近红外发射光油溶性硫化铅PbS/油溶性碳/CsPbBr3钙钛矿量子点的相关制备
  3. Cesium 地球自转 场景不转动球体转动
  4. 在牛客网答题总结的前端面试71道HTML+CSS常考题
  5. 一文读懂功率信号源(信号发生器)
  6. 右上角的引用文献格式_撰写学术论文引用文献时,标准的格式是怎样的?
  7. 【技术新趋势】面向图像文档的版面智能分析与理解
  8. AutoHotkey下载和使用
  9. Django基础必备三神装(HttpResponse、render、redirect)
  10. USC EE general_三大see+无敌TB,SAG 2:1淘汰LGD成功晋级