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操作MongoDB详解及实例
May 18 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
python itchat实现微信自动回复的示例代码
Aug 14 Python
PyQt5每天必学之切换按钮
Aug 20 Python
python 通过字符串调用对象属性或方法的实例讲解
Apr 21 Python
解决python运行启动报错问题
Jun 01 Python
Django如何批量创建Model
Sep 01 Python
python用Configobj模块读取配置文件
Sep 26 Python
matplotlib更改窗口图标的方法示例
Feb 03 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 Python
python 实现图与图之间的间距调整subplots_adjust
May 21 Python
基于Python实现一个春节倒计时脚本
Jan 22 Python
Python万能模板案例之matplotlib绘制甘特图
Python万能模板案例之matplotlib绘制直方图的基本配置
python创建字典及相关管理操作
python微信智能AI机器人实现多种支付方式
Python中request的基本使用解决乱码问题
Apr 12 #Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Python安装使用Scrapy框架
You might like
Yii框架form表单用法实例
2014/12/04 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
jquery ui对话框实例代码
2013/05/10 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
Python中除法使用的注意事项
2014/08/21 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
Opencv求取连通区域重心实例
2020/06/04 Python
python tkinter实现连连看游戏
2020/11/16 Python
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
食品营养与检测应届生求职信
2013/11/08 职场文书
社区工作者思想汇报
2014/01/13 职场文书
志愿者活动总结范文
2014/04/26 职场文书
入职担保书怎么写
2014/05/12 职场文书
解除财产保全担保书
2014/05/20 职场文书
考试作弊检讨书
2014/10/21 职场文书
调任通知
2015/04/21 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
红色故事汇观后感
2015/06/18 职场文书
爱国电影观后感
2015/06/19 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书