前言

雷达图的背景一圈一圈地像雷达,用多边形来展现数据的大小,我认为比较适合用于有多种不同维度的情形,是发现差距的一种好工具。

比如说,「得到 APP」上的学分构成包括 5 个不同维度,我根据自己的学分构成及其变化,制作了一张雷达图。

其中「持续性」与学习的天数相关,「学习量」与听课或看书的数量相关,「笔记」与笔记的数量和互动相关,「知识分享」与分享转发的次数相关,「好奇心」与搜索的次数和广度相关。

从图中可以看出,在 2020 年的年初,我在笔记方面还比较薄弱,经过努力,我做笔记的数量明显增加了。

借助雷达图,我们可以直观地看到差距,进而通过分析,更好地进行改善。

PS:如有需要Python学习资料的小伙伴可以加下方的群去找免费管理员领取

可以免费领取源码、项目实战视频、PDF文件等

02

接下来,我们看看用 matplotlib 画图的具体步骤。

首先,导入所需的库,并设置中文字体和定义颜色等。

#导入所需的库

importnumpy as npimportpandas as pdimportmatplotlib as mplimportmatplotlib.pyplot as pltimportmatplotlib.image as image#正常显示中文标签

mpl.rcParams['font.sans-serif'] = ['SimHei']#自动适应布局

mpl.rcParams.update({'figure.autolayout': True})#正常显示负号

mpl.rcParams['axes.unicode_minus'] =False#禁用科学计数法

pd.set_option('display.float_format', lambda x: '%.2f' %x)#定义颜色,主色:蓝色,辅助色:灰色,互补色:橙色

c = {'蓝色':'#00589F', '深蓝色':'#003867', '浅蓝色':'#5D9BCF','灰色':'#999999', '深灰色':'#666666', '浅灰色':'#CCCCCC','橙色':'#F68F00', '深橙色':'#A05D00', '浅橙色':'#FBC171'}

其次,从 Excel 文件中读取数据,并定义画图用的数据。

#数据源路径

filepath='./data/林骥的学分构成.xlsx'

#读取 Excel文件

df =pd.read_excel(filepath)#提取画图所需的数据

data0 = df.iloc[0, 2:].values

data1= df.iloc[1, 2:].values#提取标签

label = np.array(df.iloc[1, 2:].index)#根据分数添加评级的标签

for i, d inenumerate(data1):if d > 4:

grade= 'A^+'

elif d == 4:

grade= 'A'

elif d > 3:

grade= 'B^+'

elif d == 3:

grade= 'B'

else:

grade= 'B^-'label[i]+= '\n' + r'$\bf{' + grade + '}$'

#data 有几个数据,就把整圆 360° 分成几份

angle = np.linspace(0, 2*np.pi, len(data0), endpoint=False)#增加第一个 angle 到所有 angle 里,以实现闭合

angles =np.concatenate((angle, [angle[0]]))#倒转顺序,以让雷达图顺时针显示

angles = angles[::-1]#增加第一个 data 到所有的 data 里,以实现闭合

data0 =np.concatenate((data0, [data0[0]]))

data1= np.concatenate((data1, [data1[0]]))

接下来,开始用「面向对象」的方法进行画图。

#使用「面向对象」的方法画图,定义图片的大小

fig, ax=plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True))#设置背景颜色

fig.set_facecolor('w')

ax.set_facecolor('w')#设置标题

ax.set_title('\n林骥的学分构成及其变化\n\n', fontsize=26, loc='left', color=c['深灰色'])#设置网格标签

ax.set_thetagrids(angles*180/np.pi, labels=label)#画雷达图,用顺时针显示

ax.plot(angles, data0, 'o-', label=df.iloc[0, 0].strftime('%Y-%m-%d'))

ax.plot(angles, data1,'o-', label=df.iloc[1, 0].strftime('%Y-%m-%d'))#设置极坐标 0° 的位置

ax.set_theta_zero_location('N')#设置显示的极径范围

ax.set_rlim(0, 5)#填充颜色

ax.fill(angles, data0, facecolor=c['浅蓝色'], alpha=0.6)

ax.fill(angles, data1, facecolor=c['浅橙色'], alpha=0.6)#设置极径标签,放在第一象限的中间位置

ax.set_rlabel_position(360-360/len(data0)/2)#设置图例显示的位置

l = ax.legend(ncol=2, loc='lower center', frameon=False, borderaxespad=-3, fontsize=13)for text inl.get_texts():

text.set_color(c['深灰色'])#text.set_size(13)

#去掉最外围的黑圈

ax.spines['polar'].set_visible(False)#设置坐标标签字体大小和颜色

ax.tick_params(labelsize=16, colors=c['深灰色'])

plt.show()

03

雷达在展现多个维度的得分或性能方面,效果不错,在财务分析和标杆管理中有着广泛的应用。

另外,在一些游戏中,也有用雷达图来展现人物的能力。

但是,雷达图也有一些自身的缺点,包括:

(1)如果在一个雷达图中展现超过 2 组数据,会让图表难以阅读。

(2)变量的个数不宜过多,否则密密麻麻的线条可能让人抓不到重点。

(3)从表达数据的精确度来看,极坐标中的角度,不如直角坐标中的位置。

同样的数据,不同人得出的观点可能不一样,图表的选择可能也不一样,我们通常需要考虑以下几个因素:

(1)分析提炼的信息;

(2)所属数据的类型;

(3)想要表达的观点;

(4)想要强调的信息。

很多人作图有一种误区,就是喜欢运用所谓的技巧和创新,做出让人难以看懂的复杂图表,这与图表的目的背道而驰,是我们应该避免的。

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

作者:林骥

python雷达图的相似度_Python可视化:matplotlib 制作雷达图进行对比分析相关推荐

  1. python之matplotlib制作雷达图

    python之matplotlib制作雷达图 示例代码: import numpy as np import matplotlib.pyplot as plt import matplotlibmat ...

  2. python使用matplotlib可视化堆积的折线图、使用stackplot函数可视化堆积的折线图、不同数据在垂直方向堆叠

    python使用matplotlib可视化堆积的折线图.使用stackplot函数可视化堆积的折线图.不同数据在垂直方向堆叠 目录

  3. Python利用matplotlib制作雷达扫描显示仪(之后可结合串口和超声波传感器使用,亦可以做为仪表盘使用)

    Python利用matplotlib制作雷达扫描显示仪(之后可结合串口和超声波传感器使用,亦可以做为仪表盘使用).内有制作雷达扫描GIF图的源代码包含. ''' matplotlib雷达扫描 ''' ...

  4. 如何利用可视化工具制作折线图?步骤是什么?

    我们在写论文或者做一些PPT的时候,经常会需要画可视化折线图,虽然网上有很多可以制作折线图的可视化工具,但是大多都加了水印或者不够方便使用,直接用别人带水印的图显然是不行的.自己画的话又不会怎么办? ...

  5. python用matplotlib画雷达图_python使用matplotlib绘制雷达图

    本文实例为大家分享了python使用matplotlib绘制雷达图的具体代码,供大家参考,具体内容如下 示例代码: # encoding: utf-8 import pandas as pd impo ...

  6. python 树状图可视化_Python可视化25|seaborn矩阵图

    矩阵图即用一张图绘制多个变量之间的关系,数据挖掘中常用于初期数据探索: 本文介绍python中seaborn.pairplot(傻瓜版)和seaborn.PairGrid(更个性化版)绘制矩阵图 本文 ...

  7. python画矩阵图_Python可视化25_seaborn绘制矩阵图

    矩阵图即用一张图绘制多个变量之间的关系,数据挖掘中常用于初期数据探索: 本文介绍python中seaborn.pairplot(傻瓜版)和seaborn.PairGrid(更个性化版)绘制矩阵图 本文 ...

  8. matplotlib 标签_Python可视化matplotlibamp;seborn14热图heatmap

    "pythonic生物人"的第53篇分享. 热力图(heatmap)可通过颜色深浅变化,优雅的展示数据的差异:本篇详细介绍python seaborn绘制热图(手把手讲解). 本文 ...

  9. Python可视化 | Matplotlib绘制圆环图的两种方法!

    人生苦短,快学Python!今天给大家介绍Python可视化之环形图的绘制. 环形图,也被称为圆环图.它在功能上与饼图相同,只是中间有一个空白,并且能够同时支持多个统计数据.与标准饼图相比,环形图提供 ...

  10. python绘制折线图保存_Python利用matplotlib绘制折线图的新手教程

    前言 matplotlib是Python中的一个第三方库.主要用于开发2D图表,以渐进式.交互式的方式实现数据可视化,可以更直观的呈现数据,使数据更具说服力. 一.安装matplotlib pip i ...

最新文章

  1. HBase性能优化方法总结(四):数据计算
  2. G代码 机器人的CNC实现
  3. jzoj3059-雕塑【容斥,数论】
  4. 配置DNS服务器的需要修改的配置文件为,dns服务器配置教程
  5. 深度linux_国产系统?基于Linux研发的深度Deepin系统,到底算不算真国产
  6. Atitit.提升电子商务安全性 在线充值功能安全方面的设计
  7. ubuntu 设置保护色
  8. ModuleNotFoundError: No module named ‘Crypto‘ 踩坑
  9. AI时代,运维和测试岗位如何开启第二春?
  10. 2017年个人看书学习计划
  11. ThinkPHP 缓存技术详解 使用大S方法
  12. unity android 不锁屏,Screen.sleepTimeout=SleepTimeOut.NeverSleep 禁止屏幕锁屏
  13. hdu2191 买大米 多重背包 模板题
  14. ftp服务器中的文档不能直接打开为啥,如何直接打开ftp里的 word 文档 win7 ftp直接打开word...
  15. Redis主从模式下从库过期的key仍然能够被读到的解决方案
  16. mac php oci,PHP:OCI安装
  17. 如何安全的修改win11用户名(微软账号登录,用户名会变成纯数字,好丑)
  18. 《见识》读书笔记思维导图精华版赏析!
  19. 刷脸支付人脸识别技术是一把双刃剑
  20. 老板,缺人吗?这里有一大波产品人才想安利给你~

热门文章

  1. 外卖cps项目的玩法淘宝客经验分享
  2. 对接app 微信登录,QQ登录流程(php)
  3. c语言数组输入空格回车问题
  4. Python爬虫进阶教程:抖音APP无水印视频批量下载
  5. 关于校园粮食浪费问题的调查
  6. XCTF-攻防世界-密码学crypto-新手练习区-writeup
  7. 2020秋 英文科技论文写作与学术报告-期末
  8. html暴风粒子代码,魔兽世界课物品代码及gm指令大全(全部整理自网上).doc
  9. ae软件安装计算机丢失,Win10系统AE软件安装失败怎么办
  10. mysql及格率公式_关于mysql进行名次的排名和计算及格率的分享