fmsbggradar|复现CNS同款雷达图并且加上显著P值

news2024/11/27 11:50:19

文章目录

    • 前言
    • fmsb
      • 数据格式
      • 参数调整
      • demo
    • ggradar
      • 单样本demo
      • 多组demo
    • 实战-给radar添加统计量

前言

雷达图Radar(也称为蜘蛛图网络图)是一种二维图表,用于显示多变量数据。每个变量由从中心延伸出来的辐条(或轴)表示,数据点沿着这些辐条绘制。然后将数据点连接形成一个多边形,通过这种方式可以直观地展示多个变量之间的相对强弱。

  • DOI: 10.1038/ncomms15107

在R语言里,作雷达图的主要用fmsbggradar这两个R包,前者一般绘制的是多边形雷达图,后者默认绘制的是圆形雷达图。大同小异,大家各自体会~

下面是两个R包的部分演示以及雷达图计算统计量的项目代码分享

下方公众号回复Pradar即可领取项目代码及文件

fmsb

数据格式

有2点需要注意:

  • 作图数据必须要有一行最大值和一行最小值,用于雷达图边界划分。
  • 列数必须大于2

参数调整

  • vlabels:变量标签
  • vlcex:控制变量标签的字体大小
  • pcol:线条颜色
  • pfcol: 填色
  • plwd: 行宽
  • plty:线型。可以是数值向量 1:6 或字符向量 c(“solid”、“dashed”、“dotted”、“dotdash”、“longdash”、“twodash”)。要删除线,请使用plty = 0或plty = “blank”。
  • cglcol:线条颜色
  • cglty:线型
  • cglwd: 行宽
  • axislabcol:轴标签和数字的颜色。默认为“蓝色”。
  • caxislabels:用作中心轴上的标签的字符向量。

demo

# Plotting student 1
ggradar(
  df[1, ], 
  values.radar = c("0", "10", "20"),
  grid.min = 0, grid.mid = 10, grid.max = 20
  )

# Define colors and titles
colors <- c("#00AFBB", "#E7B800", "#FC4E07")
titles <- c("Student.1", "Student.2", "Student.3")

# Reduce plot margin using par()
# Split the screen in 3 parts
op <- par(mar = c(1, 1, 1, 1))
par(mfrow = c(1,3))

# Create the radar chart
for(i in 1:3){
  create_beautiful_radarchart(
    data = df[c(1, 2, i+2), ], caxislabels = c(0, 5, 10, 15, 20),
    color = colors[i], title = titles[i]
    )
}
par(op)

# Reduce plot margin using par()
op <- par(mar = c(1, 2, 2, 2))
# Create the radar charts
create_beautiful_radarchart(
  data = df, caxislabels = c(0, 5, 10, 15, 20),
  color = c("#00AFBB", "#E7B800", "#FC4E07")
)
# Add an horizontal legend
legend(
  x = "bottom", legend = rownames(df[-c(1,2),]), horiz = TRUE,
  bty = "n", pch = 20 , col = c("#00AFBB", "#E7B800", "#FC4E07"),
  text.col = "black", cex = 1, pt.cex = 1.5
  )
par(op)

opar <- par() 
# Define settings for plotting in a 3x4 grid, with appropriate margins:
par(mar = rep(0.8,4))
par(mfrow = c(3,4))
# Produce a radar-chart for each student
for (i in 4:nrow(df_scaled2)) {
  radarchart(
    df_scaled2[c(1:3, i), ],
    pfcol = c("#99999980",NA),
    pcol= c(NA,2), plty = 1, plwd = 2,
    title = row.names(df_scaled2)[i]
  )
}
# Restore the standard par() settings
par <- par(opar) 

ggradar

gg系列一贯作风。雷达图大同小异,且直接用表达数据即可,无须另外计算界限值。太过于简单就不展示了

  • plot.data:每个个人或团体占一行的数据
  • values.radar:在最小、平均和最大网格线上显示的值
  • grid.min:绘制最小网格线的值
  • grid.mid:绘制平均网格线的值
  • grid.max:绘制最大网格线的值

放上教程链接大家跟着来即可:https://www.datanovia.com/en/blog/beautiful-radar-chart-in-r-using-fmsb-and-ggplot-packages/#fmsb-radar-chart

此外还有棒棒糖图:

单样本demo

df2 <- t(exam_scores) %>%
  as.data.frame() %>%
  rownames_to_column("Field")
df2
ggdotchart(
  df2, x = "Field", y = "Student.1",
  add = "segments", sorting = "descending",
  ylab = "Exam Score", title = "Student 1"
  )

多组demo

df3 <- df2 %>%
  select(Field, Student.1, Student.2) %>%
  pivot_longer(
    cols = c(Student.1, Student.2),
    names_to = "student",
    values_to = "value"
  )
head(df3)
ggdotchart(
  df3, x = "Field", y = "value", 
  group = "student", color = "student", palette = "jco",
  add = "segment", position = position_dodge(0.3),
  sorting = "descending"
  )

df4 <- df2 %>%
  select(Field, Student.1, Student.2, Student.3) %>%
  pivot_longer(
    cols = c(Student.1, Student.2, Student.3),
    names_to = "student",
    values_to = "value"
  )
head(df4)
ggdotchart(
  df4, x = "Field", y = "value", 
  group = "student", color = "student", palette = "jco",
  add = "segment", position = position_dodge(0.3),
  sorting = "descending", facet.by = "student",
  rotate = TRUE, legend = "none"
  )

library(GGally)
ggparcoord(
  iris,
  columns = 1:4, groupColumn = 5, order = "anyClass",
  showPoints = TRUE, 
  title = "Parallel Coordinate Plot for the Iris Data",
  alphaLines = 0.3
  ) + 
  theme_bw() +
  theme(legend.position = "top")

实战-给radar添加统计量

这里随便找了个cibersort免疫浸润结果做的,此外还可以换成GSVA基因集评分结果、多基因组间表达等,也一样可以用雷达图。

用fmsb包,输入数据格式是一样的,第一二行为最大值和最小值

由于计算p值及整合代码篇幅过长,已打包,文末领取

pdf("radarplot.pdf", width = 9, height = 9)
# par(mar = c(1, 1, 1, 1))
par(family = "sans", cex = 1)
# 绘制雷达图并设置字体颜色
radarchart(data_radar, axistype = 1,
           pcol = colors_border, pfcol = colors_in, plwd = 2,
           cglcol = "grey", cglty = 1, axislabcol = "grey", 
           caxislabels = format(round(seq(0, max(as.numeric(as.character(unlist(data_radar)))), length.out = 5), 4), nsmall = 2), 
           cglwd = 0.8, vlcex = 0.8)

# 添加分组图例
legend(x = 0.9, y = 1.2, legend = rownames(data_radar)[c(3:4)], bty = "n", pch = 16, col = colors_border, text.col = "black", cex = 0.8, pt.cex = 1.5)
dev.off()

下方公众号回复Pradar即可领取项目代码及文件

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

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

相关文章

uniapp 使用cavans 生成海报

uniapp 使用cavans 生成海报 npm install qs-canvas1.创建 useCanvas.js /*** Shopro qs-canvas 绘制海报* version 1.0.0* author lidongtony* param {Object} options - 海报参数* param {Object} vm - 自定义组件实例*/ import QSCanvas from qs-canvas; import { getPos…

花了大几万的踩坑经验!宠物空气净化器哪个牌子好:希喂、小米、有哈PK

我的闺蜜最近向我大吐苦水&#xff0c;自从家里养了猫之后&#xff0c;她发现家里的空气质量大不如前。宠物的浮毛和排泄物的气味在空气中飘散&#xff0c;让她非常怀念以前没有养猫时家里清新的呼吸环境。她觉得这些漂浮的毛发和异味大大降低了居家的舒适度。 还引起了身体上…

容器:string

以下是对于string容器常用功能和函数的总结 主要包括 1、定义string 2、字符串赋值 3、字符串拼接&#xff1a;str.append() 4、字符串查找&#xff1a;str.find() / str.rfind() 5、字符串替换&#xff1a;str.replace(&#xff09; 6、字符串长度比较&#xff1a;str.compare…

Quartz定时任务组件

官网&#xff1a;http://www.quartz-scheduler.org/ 1&#xff09;job - 任务 - 你要做什么事&#xff1f; 2&#xff09;Trigger - 触发器 - 做什么事&#xff0c;什么时候触发&#xff0c;可以传入任务 3&#xff09;Scheduler - 任务调度 - 可以传入多个触发器进行任务调…

ASUS/华硕天选Air 2021 FX516P系列 原厂win10系统

安装后恢复到您开箱的体验界面&#xff0c;带原机所有驱动和软件&#xff0c;包括myasus mcafee office 奥创等。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http:…

Transformer教程之序列到序列模型(Seq2Seq)

在自然语言处理&#xff08;NLP&#xff09;的领域中&#xff0c;Transformer模型无疑是近年来最具革命性的方法之一。它的出现不仅大大提高了机器翻译、文本生成等任务的精度&#xff0c;还推动了整个深度学习研究的进步。本文将详细介绍Transformer模型中的序列到序列模型&am…

【Linux】性能分析器 perf 详解(一):简介、安装、stat命令演示

1、简介 perf 是由 Linux 官方提供的系统性能分析工具 。它包含两部分: perf_events ,Linux 内核中的一个子系统perf 命令,用户空间的应用程序内核子系统 perf_events 提供了性能计数器(hardware performance counters)和性能事件的支持,它以事件驱动型的方式工作,通过…

NVIDIA-NCCL下载资源分享,跳过Authenticator验证

目录 Authenticator进入下载页面Download NCCL 2.22.3, for CUDA 12.5, June 18th, 2024Local installers (x86)Network installers (x86)Local installers (ARM)Network installers (ARM) Download NCCL 2.22.3, for CUDA 12.4, June 18th, 2024Local installers (x86)Network…

如何实现高精度PCB切割?— 在线式激光切割机解决方案

在线式PCB精密激光切割机是一种专门用于电子行业中印刷电路板&#xff08;PCB&#xff09;切割的高精度设备。以下是关于在线式PCB精密激光切割机的详细信息和特点&#xff1a; 1. 工作原理&#xff1a; 在线式PCB精密激光切割机主要通过激光束的高能量密度对PCB板进行瞬时加热…

2024年客户体验的几个预测

数字化转型、以客户为中心的理念、数字技术的发展和产品的不断创新&#xff0c;都为客户体验带来了巨大的改变。 目前&#xff0c;我们看到很多公司都在致力于塑造一种以客户为中心的商业模式。企业开始用更多技术、更多数据和更多产品来强化自己在客户体验方面的能力。 那么&a…

应用DMAIC方法解决问题的注意事项有哪些?

在解决问题的过程中&#xff0c;DMAIC方法作为一种强大的工具&#xff0c;广泛应用于各类质量管理、流程改进以及持续优化的项目中。DMAIC代表定义&#xff08;Define&#xff09;、测量&#xff08;Measure&#xff09;、分析&#xff08;Analyze&#xff09;、改进&#xff0…

嵌入式应用开发屏幕教程8080并口通信

目录 #8080相关概念介绍 #8080并行通信硬件连接部分 #并行通信硬件电路连接图 #并行通信读数据规定 #并行通信写数据规定 #8080相关概念介绍 通信协议分为串行通信协议&#xff0c;并行通信协议&#xff0c;而本章所讲的8080是一种并行通信协议&#xff0c;并行通信协议 Pa…

FullScreen API与F11快捷键的相关问题排查与解决

前言 某个项目需要点击全屏按钮将页面中某个容器内的元素进行全屏显示便于用户操作&#xff0c;点击退出全屏时显示原来的页面内容 问题 1&#xff1a;指定元素全屏存在部分元素无法显示 记得之前看 FullScreen 相关API时有印象可以让某一元素直接全屏显示&#xff0c;随即…

视频技术朝着8K超高清方向发展,安防监控领域将迎来怎样变化?

一、背景 随着科技的日新月异&#xff0c;视频技术已逐渐成为我们日常生活中不可或缺的一部分。从娱乐、教育到安全监控&#xff0c;视频技术无处不在&#xff0c;并以其独特的方式影响着我们的生活方式。本文将探讨视频技术的发展趋势&#xff0c;并重点关注其在监控领域的应…

哨兵模式--哨兵节点的功能?

哨兵节点的主要功能有&#xff1a; 集群监控&#xff1a;监控 主、从节点的健康状况&#xff1b;自动切换主节点&#xff1a;当 Master 运行故障&#xff0c;哨兵启动自动故障恢复流程&#xff1a;从 slave 中选择一台作为新 master。通知&#xff1a;让 slave 执行 replicaof…

重磅!UOSDN焕新,开启创新之旅!

亲爱的开发者们 经过精心打磨和优化 全新改版的UOSDN&#xff08;统信开发者支持网络&#xff09; 已经正式上线啦&#xff01; 我们致力于为您打造一个更加便捷、高效、富有创意和互动性的开发平台&#xff0c;详情&#x1f449;https://uosdn.uniontech.com/ 以UOSDN作为载…

双向长短期记忆神经网络BiLSTM

先说一下LSTM LSTM 是一种特殊的 RNN&#xff0c;它通过引入门控机制来解决传统 RNN 的长期依赖问题。 LSTM 的结构包含以下几个关键组件&#xff1a; 输入门&#xff08;input gate&#xff09;&#xff1a;决定当前时间步的输入信息对细胞状态的影响程度。遗忘门&#xff…

【深度学习】服务器炼丹代码配置、Python使用指定gpu显卡运行代码

【显卡】服务器炼丹代码配置 写在最前面一、查看哪几块显卡能用二、使用指定gpu运行代码1、指定使用GPU0运行脚本&#xff08;默认是第一张显卡, 0代表第一张显卡的id,其他的以此类推&#xff09;2、指定使用多张显卡运行脚本 三、如何使用1、单块显卡使用2、多GPU训练使用Data…

加固三防平板如何提高轨道交通系统的运营效率?

在当今快节奏的社会中&#xff0c;轨道交通系统作为城市交通的重要组成部分&#xff0c;其运营效率的提升对于缓解交通拥堵、满足人们的出行需求以及促进城市的发展具有至关重要的意义。而加固三防平板作为一种先进的技术设备&#xff0c;正逐渐在轨道交通领域发挥着关键作用&a…

Java对象类辨识指南:Object与Objects类的区别详解

今天在写lambda表达式时&#xff0c;用filter来做过滤判断我的结果是否为null时使用到了Objects.nonNull&#xff0c;但是敲着敲着发现不对劲&#xff0c;怎么没有nonNull方法?? 其实时我少敲了一个s&#xff0c;当时自己并没有很清楚Object和Objects两者之前的区别&#xf…