雷达图怎么绘制?!超简单,一次性告诉你Python和R绘制方法~~

news2024/10/11 14:50:32

今天给大家介绍的的图表为雷达图(Radar/Spider chart),这种类型图表在生活中较常使用,是一种以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法。较常用的场景多为分析企业经营状况(收益性、生产性、流动性、安全性和成长性)。本期推文带你使R-Python绘制雷达图,主要内容如下:

  • R 绘制雷达图

  • Python 绘制雷达图

  • 更多详细的数据可视化教程,可订阅我们的店铺课程:

R 绘制雷达图

在R语言中,绘制雷达图的包主要为fmsb包和*ggradar包,这里我们首先介绍fmsb包:

fmsb包绘制雷达图

  1. 创建测试数据集,这里我们构建如下:

# 构建测试数据集
test_data <- data.frame(row.names = c('Name01','Name02','Name03'),
                        Biology = c(7.9, 3.9, 9.4),
                        Physics = c(10, 20, 0),
                        Maths = c(3.7, 11.5, 2.5),
                        Sport = c(8.7, 20, 4),
                        English = c(7.9, 7.2, 12.4),
                        Art = c(2.4, 0.2, 9.8),
                        Music = c(20, 20, 20))
#定义每个变量的范围(只适用于fmsb包绘制)
max_min <- data.frame(row.names = c("Max", "Min"),
                      Biology = c(20, 0), 
                      Physics = c(20, 0), 
                      Maths = c(20, 0),
                      Sport = c(20, 0), 
                      English = c(20, 0), 
                      Art = c(20, 0),
                      Music = c(20, 0))
 # 合并数据
test_data_pro <- rbind(max_min,test_data)           
  1. 单一变量绘制

我们首先绘制单一变量的雷达图,代码如下:

# 选取数据
name1_df <- test_data_pro[c("Max", "Min", "Name01"),]
plot01 <- fmsb::radarchart(name1_df)

Spider plot with single variable

Spider plot with single variable

这里我们对radarchart()部分重要参数进行解释:

  • 多边形特征(Polygon features):

    • pcol:线颜色

    • pfcol:填充颜色

    • plwd:线宽

  • 网格功能(Grid features):

    • cglcol:网的颜色

    • cglty:网格线类型

    • axislabcol:轴标签的颜色

    • caxislabels:要显示的轴标签向量

    • cglwd:网格线宽

  • 标签(Labels):

    • vlcex:组标签字体大小

    • vlabels: 变量名称 接下来我们就用到上面参数,使用多变量进行绘制:

color <- c("#00AFBB", "#E7B800", "#FC4E07")
plot02 <- radarchart(test_data_pro,title = c("Three Spider charts"),
                     caxislabels = c(0, 5, 10, 15, 20),
                     pcol = color,
                     pfcol = scales::alpha(color, 0.5), 
                     plwd = 2, plty = 1,
                     # Customize the grid
                     cglcol = "grey", cglty = 1, cglwd = 0.8,
                     # Customize the axis
                     axislabcol = "grey", 
                     # Variable labels
                     vlabels = colnames(test_data),vlcex = 1,
)
# 添加图例
legend(
  x = "bottom", legend = c('Name01','Name02','Name03'), 
  horiz = TRUE,bty = "n", pch = 20 , col = color,
  text.col = "black", cex = 1, pt.cex = 1.
)

Multiple spider charts in one grid

Multiple spider charts in one grid

除此之外,我们还可以将每个变量进行单独绘制(循环绘制即可):

colors <- c("#ff7473", "#ffc952", "#47b8e0")
op <- par(mar = c(1, 1, 1, 1),bg = "#34314c")
#op <- par(bg = "#34314c")
par(mfrow = c(1,3))

# Create the radar chart
for(i in 1:3){
  radarchart(test_data_pro[c(1, 2, i+2), ], 
    caxislabels = c(0, 5, 10, 15, 20),
    #title = titles[i],
    pcol = colors[i],
    pfcol = scales::alpha(colors[i], 0.8), 
    plwd = 2, plty = 1,
    # Customize the grid
    cglcol = "grey", cglty = 1, cglwd = 0.8,
    # Customize the axis
    axislabcol = "grey", 
    # Variable labels
    vlabels = colnames(test_data),vlcex = 1
  )
}

par(op)

结果如下:

Mult charts in one row

(这里我没找到设置刻度label颜色的属性哈)

介绍完fmsb包绘制雷达图,接下来我们介绍ggradar包绘制。

ggradar包绘制雷达图

由于是ggplot2的推展包,一些语法也就比较简单和熟悉,首先,我们需要对数据进行修改:

# 将行名称作为单独一列,为group列
data_pro <- test_data %>% tibble::rownames_to_column(var = "group")

我们绘制单一变量的雷达图:

plot_ggradar_single <- ggradar(data_pro[1,],values.radar = c("0", "10", "20"),
                              grid.min = 0, grid.mid = 10, grid.max = 20)

single var

single var

当然,我们可以通过其自身的参数进行定制化操作,这里不一一列举,代码中有明确解释:

ggradar_single_set <- ggradar(data_pro[1,],
                              #设置字体
                              font.radar = "Roboto Condensed",
                              values.radar = c("0", "10", "20"),
                              grid.min = 0, grid.mid = 10, grid.max = 20,
                              #设置grid.label字体大小和网格线颜色
                              grid.label.size = 8,
                              grid.line.width = 1,
                              gridline.min.colour = "#A5DFF9",
                              gridline.mid.colour = "#EF5285",
                              gridline.max.colour = "#60C5BA",
                              # 设置分组属性
                              group.colours = "#30A9DE",
                              group.line.width = 1.2,
                              group.point.size = 4,
                              # 设置背景
                              background.circle.colour = "#FEEE7D",
                              #设置刻度label
                              axis.label.size = 8,
                              #图例设置
                              plot.legend = "TRUE",
                              legend.position = "bottom",
                              legend.title = "Single Group :",
                              legend.text.size = 15
                             ) 

结果如下:

Single Var Cus

也可以绘制多变量雷达图:

ggradar_mult <-ggradar(
      data_pro,
      values.radar = c("0", "10", "20"),
      grid.min = 0, grid.mid = 10, grid.max = 20,
      group.line.width = 1, 
      group.point.size = 3,
      group.colours = c("#00AFBB", "#E7B800", "#FC4E07"),
      background.circle.colour = "white",
      gridline.mid.colour = "grey",
      legend.position = "bottom"
      )

Mult Var Charts

Mult Var Charts

当然,我们还可以使用 + 对其进行其他图层熟悉的添加(和ggplot2一样)

以上就是使用R进行雷达图的绘制,接下来,小编再简单介绍下,使用Python 进行绘制。

Python 绘制

这里我们先看下数据:

data for Python make

data for Python make

绘制代码如下(大家可直接记住即可)

  • 绘制网格(极坐标)

categories=list(data)[1:]
N = len(categories)
# 分配角度
angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1]
 
ax = plt.subplot(111, polar=True)
 
ax.set_theta_offset(pi / 2)
ax.set_theta_direction(-1)
plt.xticks(angles[:-1], categories,size=12)
 
# 绘制刻度label
ax.set_rlabel_position(0)
plt.yticks([10,20,30], ["10","20","30"], color="grey", size=10)
plt.ylim(0,25)
  • 添加数据

#变量01
values=data.loc[0].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="group A")
ax.fill(angles, values, 'b', alpha=0.1)
#变量01
values=data.loc[1].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="group B")
ax.fill(angles, values, 'r', alpha=0.1)
 
# 图例
plt.legend(loc='lower center',frameon=False,ncol=2,bbox_to_anchor=(0.5, -0.2))

上述变量多的话,可以定义函数进行批量处理,这里只去了2个变量。可视化结果如下:

Radar chart Python make

Radar chart Python make

总结

以上就是关于雷达图(Radar chart)的R和Python绘图方法,大家可以结合自己喜好选择工具进行绘制哈(感觉还是R方便哈)~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vatee万腾平台:企业数字化转型的加速器

在当今这个信息化、数字化高速发展的时代&#xff0c;企业要想在激烈的市场竞争中立于不败之地&#xff0c;就必须紧跟时代步伐&#xff0c;实现数字化转型。而Vatee万腾平台&#xff0c;正是这样一款能够助力企业快速、高效完成数字化转型的利器&#xff0c;它如同一位经验丰富…

【MySQL】基本查询(下):更新、删除

3.Update 语法&#xff1a; UPDATE table_name SET column expr [, column expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]举几个例子&#xff1a; 将孙悟空同学的数学成绩变更为 80 分&#xff1a; 将曹孟德同学的数学成绩变更为 60 分&#xff0c;语文成绩变更为 …

【GUI】使用 PySide6 创建一个简单的计算器

使用 PySide6 创建一个简单的计算器 在这篇博客中&#xff0c;我们将探索如何使用 PySide6 创建一个简单的计算器应用程序。PySide6 是 Python 的 Qt 绑定&#xff0c;提供了一套强大的工具来开发图形用户界面&#xff08;GUI&#xff09;应用程序。通过这个项目&#xff0c;我…

PPT技巧:保护PPT文件的方法有哪些?

PPT文件制作好之后保证文件不出错应该是很重要的&#xff0c;毕竟是要拿出去展示的&#xff0c;今天分享PPT加密方法给大家。希望能够帮助大家保护好自己的PPT文件。 打开密码 如果想要其他人需要输入正确的密码才能够打开文件查看并编辑&#xff0c;我们可以给PPT文件设置打…

除了电商,API在其他行业中的应用有哪些?

API&#xff08;应用程序编程接口&#xff09;在不同行业中扮演着至关重要的角色&#xff0c;它们促进了数据共享、服务集成和业务创新。以下是API在各个行业中的一些关键应用案例和作用&#xff1a; 金融服务行业 在金融服务行业&#xff0c;API的应用正在改变游戏规则。通过…

【安装教程】飞牛私有云fnOS安装部署

原文链接&#xff1a;【安装教程】飞牛私有云fnOS安装部署 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于飞牛私有云fnOS的安装和使用指南。飞牛私有云&#xff08;fnOS&#xff09;是一款专为企业和个人用户设计的私有云操作系统&#xff0c;提供了安全、便捷…

睡眠监测免费软件

睡眠监测免费软件&#xff0c;在现代社会中&#xff0c;随着生活节奏的加快和压力的增加&#xff0c;许多人都面临着睡眠问题。失眠、浅睡、早醒等问题不仅影响着我们的身体健康&#xff0c;也对日常生活造成诸多不便。然而&#xff0c;科技的进步为我们提供了许多解决方案&…

力扣 二叉树 104. 二叉树的最大深度

104. 二叉树的最大深度 一、题目描述 二、理解 对照二叉树的递归定义&#xff1a; 如果树为空&#xff0c;则它是一个空树。如果树不为空&#xff0c;它由一个根节点和两个子树组成&#xff0c;分别是左子树和右子树&#xff0c;且左子树和右子树本身也是二叉树。 采用递归形…

潜水打捞系统助力,破解汽车打捞难题

随着人类活动的不断扩展&#xff0c;汽车落水事故频发&#xff0c;成为救援工作中的一大难题。汽车因其重量和结构特性&#xff0c;一旦沉入水体&#xff0c;打捞工作将面临巨大挑战。传统的打捞方法往往效率低下&#xff0c;且在操作过程中可能会对汽车造成进一步的损害&#…

Leetcode 50. Pow ( x , n ) 快速幂、取模 C++实现

问题&#xff1a;Leetcode 50. Pow ( x , n ) 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数。 算法&#xff1a; 具体实现流程如下&#xff1a; 代码&#xff1a; class Solution { public:double myPow(double x, int N) {double ans 1;long long n N;if (n <…

Spring Boot实现的作业管理系统:师生评价一体化

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

【Vue】扫盲(五)Vue 的生命周期与钩子函数详解

【Vue】Vue扫盲&#xff08;一&#xff09;事件标签、事件修饰符&#xff1a;click.prevent click.stop click.stop.prevent、按键修饰符、及常用指令 【Vue】Vue扫盲&#xff08;二&#xff09;指令&#xff1a;v-for 、v-if、v-else-if、v-else、v-show 【Vue】Vue扫盲&…

LSTM时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测

本文内容&#xff1a;Python实现LSTM长短期记忆神经网络时间序列预测&#xff0c;使用的数据集为AirPassengers 目录 数据集简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 数据集简介 AirPassengers 数据集的来源可以追溯到经典的统计和时间序列分析文献。原始数据集由 Box,…

Windows下MYSQL8.0如何恢复root权限

误操作把root权限清掉导致数据库无法登录&#xff08;确实很难受&#xff09;&#xff0c;在网上找了很多方法&#xff0c;发现没有很行之有效的方法&#xff0c;在多方尝试终于找到了适合敏感宝宝体质的方法。 C:\Users\Administrator>mysql -u root -P3307 ERROR 1045 (2…

下标记数(一)

第1题 0~5出现次数&#xff08;程序填空&#xff09; 统计出一串0~5数字构成的数列中&#xff0c;6种数字各自出现的次数。 输入格式 第一行1个正整数&#xff1a;N&#xff0c;范围在[1,100]。第二行N个由0~5组成的数列。 输出格式 一行6个整数&#xff0c;分别是0~5出现的…

免杀对抗—javaASMMSF源码特征修改汇编调用CS内联C

前言 今天讲最后的两个语言java和汇编&#xff0c;那么基本所有语言就讲了一个遍了。java在后门免杀这一块呢其实是有点鸡肋的&#xff0c;其它语言编译成的是exe&#xff0c;而java编译成的是jar包&#xff0c;而jar包又得有java环境才能运行&#xff0c;不像exe是个电脑都行…

股市大涨,为什么交易所系统奔溃

最近股市大涨&#xff0c;创造了开盘 35分钟成交量、单日成交量等等突破性历史记录。伴随而来的多家交易所系统奔溃的消息。今天&#xff0c;聊一下&#xff0c;当股市大涨时&#xff0c;交易所系统为何会崩溃。 首先&#xff0c;让我们以股市的角度切入。股市的每一次大涨&am…

YOLOV5改进系列(3)——ECA注意力机制

一、ECA注意力机制介绍、 论文地址&#xff1a;ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks | IEEE Conference Publication | IEEE Xplore 1. ECA的本质&#xff1a; ECA是一种通道注意力机制的实现形式&#xff0c;基于SE&#xff08;Squ…

代码签名证书:守护软件安全与信任的第一道防线

提起软件代码签名证书&#xff0c;可能对大多数人来说比较陌生&#xff0c;但是对于软件开发者来说是一款在软件发布前必不可少的工具。之所以这样说的原因在于&#xff0c;代码签名证书可以有效保障用户和软件开发者的权益。 代码签名证书是数字证书的一种&#xff0c;是专为…

什么是快充协议、支持多协议的USB Type-C受电端取电芯片

随着快充技术的不断发展&#xff0c;传统的慢充模式已经满足不了消费者对充电效率的要求。有了快充技术的支持很大程度的缩短了我们的充电时间&#xff0c;给我们的生活带来了很多便利。 什么是快充协议 快充协议是快充技术的核心&#xff0c;现如今市面上已经有很多种快充协议…