当前位置: 首页>后端>正文

R语言小记2:为一个包含多列数据并且包含分组信息的数据框批量绘制小提琴图

关键步骤:

  1. 确定数据框结构: 确保你的数据框包含了你想要绘制的多列数据以及一个用于分组的列;
  2. 获取列名: 使用names() 函数获取除了分组列之外的所有列名;
  3. 创建绘图函数: 创建一个函数,该函数接受一个列名作为参数,并使用该列名创建小提琴图;
  4. 应用函数: 使用 lapply() 函数将该函数应用于所有数据列,创建多个小提琴图;
  5. 组合绘图: 使用适当的方式将多个小提琴图组合在一起显示,比如使用 grid.arrange() 函数

1. 数据准备

# 加载所需的R包
library(ggplot2)
library(ggpubr)
library(gridExtra)

# 读取文件
exp <- read.table("/data/shumin/matrix.txt", header = T) # 样本信息
exp[1:6, 1:10]
##                                  RAC1  SLC7A11   SLC3A2     RPN1   NCKAP1   CYFIP1     ABI2     ATF4    NUBPL  Group
##  TCGA-CV-A463-01A-11R-A266-07 9.027184 4.815845 8.767927 7.936989 7.646566 7.243376 3.760851 8.329476 3.259631  tumor
##  TCGA-CV-7102-01A-11R-2016-07 8.504958 5.268687 9.159279 8.806921 7.893445 7.543969 4.775983 8.426249 3.322592  tumor
##  TCGA-BA-A6DL-01A-21R-A30B-07 9.095092 5.191789 9.046166 8.372593 8.160932 7.120546 4.966232 8.436089 4.590481  tumor
##  TCGA-CR-6471-01A-11R-1873-07 8.596830 5.723322 8.279461 8.149974 7.997551 7.658795 4.072391 8.099835 2.578572  tumor
##  TCGA-CV-6961-11A-01R-1915-07 8.308389 5.982377 8.222293 7.720235 7.514945 7.347576 2.972135 8.031825 2.760799 normal
##  TCGA-CQ-A4CE-01A-11R-A266-07 8.535993 5.510509 8.553196 8.090654 7.472670 6.983913 3.709562 8.187979 3.257152  tumor

# 获取数据框中的所有列名(除了分组列)
data_cols <- setdiff(names(exp), "Group")

2. 图形绘制

# 创建一个函数,用于生成小提琴图
create_violinplot <- function(col_name) {
  # 创建小提琴图
  violin_plot <- ggplot(exp, aes_string(x = "Group", y = col_name, fill = "Group")) +
    geom_violin(scale = "width",alpha=0.8,width=0.5,size=0.8) +
    scale_fill_manual(values = c("#202850", "#861B20")) + 
    #geom_jitter(width = 0.1, alpha = 1) +
    labs(x = "Group", y = col_name) +
    stat_compare_means(aes(Group = Group),                       #按分组进行统计检验
                       method = "t.test",
                       paired = F,                             #非配对t检验
                       symnum.args = list(cutpoint=c(0, 0.001, 0.01, 0.05, 1),
                                          symbols=c("***", "**", "*", "ns")),
                       label = "p.signif",
                       size = 3) +
    theme_bw() +
    ggtitle(paste("Violin Plot of", col_name))
  
  return(violin_plot)
}

# 使用 lapply() 函数创建多个小提琴图
violin_plots <- lapply(data_cols, create_violinplot)

# 可以使用 grid.arrange() 函数将多个小提琴图组合到一起显示
grid.arrange(grobs = violin_plots, ncol = 3) # 将图按 3 列排列
R语言小记2:为一个包含多列数据并且包含分组信息的数据框批量绘制小提琴图,第1张
ggplot2-2

https://www.xamrdz.com/backend/3fb1938985.html

相关文章: