首页 > 编程语言 >雷达图怎么绘制?!超简单,一次性告诉你Python和R绘制方法~~

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

时间:2024-10-11 13:48:16浏览次数:3  
标签:一次性 Python values angles 雷达 ax 绘制

今天给大家介绍的的图表为雷达图(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方便哈)~

标签:一次性,Python,values,angles,雷达,ax,绘制
From: https://blog.csdn.net/qq_40483688/article/details/142852071

相关文章

  • python 09-pycharm连接远程服务器
    准备一个云服务器(linux操作系统)找一个免费试用的服务器用于练习,这里用这个服务器:在pycharm中连接服务器‌-VirtualEnvironment‌:‌Python的虚拟环境,‌允许每个项目拥有独立的库和解释器,‌避免依赖冲突。‌通过virtualenv等工具创建,‌适用于隔离项目依赖。‌‌-Sy......
  • Jupyter Notebook 中同时使用 Python 和 R
    要在JupyterNotebook中同时使用Python和R,可以通过rpy2库来实现。以下是具体步骤:安装rpy2(如果尚未安装):pipinstallrpy2在JupyterNotebook中加载R包:可以在Python代码单元中使用rpy2的importr函数来加载R包。下面是一个示例代码,展示如何加载neuroba......
  • python scapy发包、抓包、分析
    importosimporttelnetlibfromscapy.allimport*fromscapy.layers.inetimport*fromscapy.allimportsniff#pac=dir(scapy.layers)#print(pac)#执行代码后,会输出Scapy中的各层#print(explore(scapy.layers.l2))#查看各种二层协议#print(explore(sc......
  • Python+Layui后台管理
    项目简介:主要分为这几个模块:创建任务、发布任务、任务清单、修改任务、取消任务、个人填写日志、日志记录。1.任务列表模糊查询:提供搜索框,支持用户输入关键词进行模糊查询。操作按钮:分配任务、公司内部创建任务2.公司内部创建任务任务表单主要是有:客户单位、合同名称、联系......
  • Python高级库与框架:提升你的开发效率
    引言在Python的世界中,有着无数强大且灵活的库和框架,它们大大提升了开发的效率和能力。无论是在数据分析、机器学习、Web开发,还是爬虫等领域,掌握这些高级库与框架都能帮助你更快速地完成任务。不过,新手在使用这些库和框架时,常常会遇到一些困难和误区。今天,我们将一起探索一些流......
  • 基于YOLO11/v10/v8/v5深度学习的安检X光危险品检测与识别系统设计与实现【python源码+
    《博主简介》小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~......
  • Python、R语言Lasso、Ridge岭回归、XGBoost分析Airbnb房屋数据:旅游市场差异、价格预测
    全文链接:https://tecdat.cn/?p=37839原文出处:拓端数据部落公众号 分析师:KefanYu在大众旅游蓬勃发展的背景下,乡村旅游已成为推动乡村经济、社会和文化发展的关键力量。当前,乡村旅游接待设施主要以招待所、小宾馆和农家乐等形式存在。然而,一方面这些设施的接待能力有限,另一方......
  • [含文档+PPT+源码等]精品基于Python实现的个性化阅读推荐系统
    基于Python实现的个性化阅读推荐系统的背景主要源于互联网技术的飞速发展和用户对于个性化信息获取的需求增加。以下是对该背景的具体阐述:一、互联网技术发展随着互联网技术的不断进步,数字化阅读已成为人们获取信息的重要方式。无论是电子书、在线文章还是各类文献资料,都通过......
  • python+django+uniapp高校社团管理系统 微信小程序 a4z3n
    目录项目介绍具体实现截图开发者工具介绍技术路线解决的思路性能/安全/负载方面开发语言以及框架介绍数据库设计python-flask核心代码部分展示python-django核心代码部分展示详细视频演示源码获取项目介绍主要是对于申请入社工作调研,以及对申请入社信息采集、存储、......
  • 【教程】0x04 绘制记牌器窗口及插件打包 —— 通过MYScrcpy学python系列
    前言MYScrcpyGithub/Gitee从1.6.4版本开始,MYScrcpy为童鞋们提供了一个开放的插件开发环境(Extensions)。童鞋们可以根据需要自行开发插件。本章主要讲解如何通过面向对象的思想,借助Dearpygui绘制一个记牌器面板,同时如何打包插件进行共享。注意插件用于功能测试及......