当前位置:   article > 正文

利用TCGA数据库来做RNAseq的通用流程(很多注释版)_tcga数据库怎么用

tcga数据库怎么用

1、下载临床相关的表格以及原始数据(GDCdata-TCGA-LAML-CLINICDATA里面),这里我们以TCGA-LAML(急性髓细胞白血病)数据为例,下载其临床数据信息。

  1. #####一、下载临床数据#####
  2. setwd("H:\\RDATA\\test/")
  3. # 临床数据
  4. # XML数据-全面信息
  5. library(TCGAbiolinks)
  6. query <- GDCquery(
  7. project = "TCGA-LAML", #癌症TCGA存储文件,可以在官网查询
  8. data.category = "Clinical", #需要下载的文件类型,可以在官网查看可以下在什么信息
  9. data.type = "Clinical Supplement", #需要下载的文件类型
  10. data.format = "BCR XML") #文件格式
  11. GDCdownload(query = query, #下载文件,下载过的话,后面直接将directory改到这个储存位置就可以了
  12. method = "api",
  13. directory = "GDCdata-TCGA-LAML-CLINICDATA",# 默认文件夹名称GDCdata,后面也要相应修改
  14. files.per.chunk = 3) # 网速慢、文件大可以设置files.per.chunk分开下载
  15. # 循环输出临床数据
  16. clinical.info<-c("patient","radiation")
  17. #可以提取的信息
  18. #clinical.info<-c("patient","drug","follow_up","radiation","stage_event","new_tumor_event","admin")
  19. # 循环写出
  20. for(i in clinical.info){
  21. clidata <- GDCprepare_clinic(query, clinical.info = i,directory = 'GDCdata-TCGA-LAML-CLINICDATA')
  22. #directory:临床文件储存的位置
  23. write.csv(clidata, file = paste0('TCGA-LAML_clinical_',i,'.csv'), row.names =F)
  24. }
  25. # 在excel中处理数据,也可以在R处理

Tips:

所有TCGA数据可以在官网查看,关于TCGA使用方法下面有个视频可以参考看看:

GDC (cancer.gov)icon-default.png?t=N6B9https://portal.gdc.cancer.gov/TCGA-01-TCGA数据库介绍_哔哩哔哩_bilibiliicon-default.png?t=N6B9https://www.bilibili.com/video/BV1824y1H75N/?spm_id_from=333.999.0.0

 2、下载矩阵数据(Count矩阵),这里我们下载转录组数据为例

  1. #####二、下载矩阵数据#####
  2. # counts下载
  3. # 以RNA-seq表达矩阵为例
  4. query <- GDCquery(project = "TCGA-LAML",
  5. data.category = "Transcriptome Profiling",
  6. data.type = 'Gene Expression Quantification',
  7. experimental.strategy = "RNA-Seq",
  8. workflow.type = "STAR - Counts")
  9. GDCdownload(query,directory = "GDCdata-TCGA-LAML-COUNTS") #保存的位置
  10. testdata <- GDCprepare(query = query, directory = 'GDCdata-TCGA-LAML-COUNTS') # SummarizedExperiment对象
  11. library(SummarizedExperiment)
  12. names(assays(testdata)) #可以进行提取的矩阵
  13. rowdata <- rowData(testdata) # 查看rowdata内容
  14. names(rowdata)
  15. table(rowdata$gene_type) # 统计基因类型,下面可以提取的选择就在这里
  16. head(rowdata$gene_name,10) # gene_name就是symbol
  17. length(rowdata$gene_name) #有多少gene
  18. test_miRNA <- testdata[rowdata$gene_type == "miRNA"] # 提取miRNA
  19. test_mRNA <- testdata[rowdata$gene_type == "protein_coding",] # 提取mRNA

到这里位置我们有两个文件夹,GDCdata-TCGA-LAML-CLINICDATA和GDCdata-TCGA-LAML-COUNTS,分别存放着临床数据和数值矩阵两个原始文件,如果之后要重新分析,可以不用下载,直接将directory放到这两个文件对应的地方。

三、提取矩阵,这里我们使用counts矩阵为例

  1. #####三、提取表达矩阵#####
  2. # 提取表达矩阵
  3. # mRNA的counts矩阵
  4. test.mRNA.counts <- assay(test_mRNA,"unstranded") # counts矩阵用于后续差异分析
  5. # mRNA的tpm矩阵
  6. test.mRNA.tpm <- assay(test_mRNA,"tpm_unstrand")
  7. # mRNA的fpkm矩阵
  8. test.mRNA.fpkm <- assay(test_mRNA,"fpkm_unstrand")
  9. # 添加gene_symbol,基因名称
  10. mRNA.symbol <- rowData(test_mRNA)$gene_name
  11. # 合并
  12. test.mrna.frame <- cbind(as.data.frame(mRNA.symbol),
  13. as.data.frame(test.mRNA.counts))
  14. dim(test.mrna.frame) #基因/样品数量

四、初步处理并保存该count矩阵 

  1. #####四、初步处理#####
  2. # 去重数据
  3. qc = as.matrix(test.mrna.frame)
  4. rownames(qc)=qc[,1] # gene_symbol
  5. exp=qc[,2:ncol(qc)] # matrix
  6. dimnames=list(rownames(exp),colnames(exp))
  7. data=matrix(as.numeric(as.matrix(exp)),nrow=nrow(exp),dimnames=dimnames)
  8. # 对重复的基因取平均值
  9. data = limma::avereps(data) # 去重,出现多行取平均值
  10. # 过滤表达量低的基因,可根据基因数目进行调整
  11. CHOL.test=data[rowMeans(data)>5,]
  12. output <- rbind(colnames(CHOL.test),CHOL.test)
  13. dim(output)
  14. write.table(output, file="LAML_mRNA矩阵去重.txt", sep="\t", quote=F, col.names=F)

 以及根据“TCGA-LAML_clinical_patient”准备好了meta分组文件(怎么准备?用excel吧=-=):

 五、RNAseq(使用的DESEQ2)

  1. #####五、RNAseq#####
  2. #####5.1 读入文件并处理#####
  3. rt=read.table("LAML_mRNA矩阵去重.txt",sep="\t",header=T,check.names=F, row.names = 1)
  4. dim(rt)
  5. rt <- round(rt,0) #counts需要取整数
  6. rt <- rt[, substr(names(rt), 14, 16) == "03A"] #仅保留03A的数据
  7. #TCGA命名规则:https://zhuanlan.zhihu.com/p/564801425,这个一定要看一遍
  8. patient_ID <- read.csv("meta.csv") #读入meta文件(根据临床文件自己准备好,这里准备的是性别)
  9. patient_ID <- patient_ID[!duplicated(patient_ID$id), ]#去重复行名(有的病人有多个样本)
  10. patientIDs <- patient_ID[, 1] #提取ID向量
  11. rt <- rbind(colnames(rt), rt) #加一行格式为TCGA-XX-XXXX的行
  12. names(rt) <- substr(names(rt), 1, 12) #加一行格式为TCGA-XX-XXXX的行
  13. selected_rt <- rt[, colnames(rt) %in% patientIDs] #取矩阵和meta数据中都有的病例(因为counts矩阵有时候会有缺失的,或者说没有对应病人的)
  14. colnames(selected_rt) <- as.character(unlist(selected_rt[1,]))#列名改格式为TCGA-XX-XXXX
  15. selected_rt <- selected_rt[-1,]#列名改格式为TCGA-XX-XXXX
  16. names(selected_rt) <- substr(names(selected_rt), 1, 12)#列名改格式为TCGA-XX-XXXX
  17. has_duplicates <- any(duplicated(names(selected_rt)))# 看有无重复列名(一个病例多个样本)
  18. selected_rt <- selected_rt[, !duplicated(names(selected_rt))]#去重复列名
  19. A <- c(colnames(selected_rt)) #处理过的矩阵里面所有病例
  20. B <- c(patient_ID$id) #meta里面所有病例
  21. different_values <- setdiff(B, A) #有临床数据但是没有相对应的矩阵数据的病例
  22. patient_ID <- patient_ID[!patient_ID$id %in% different_values, ] #删掉这些没有对应数据的病例
  23. write.csv(selected_rt,file = "mRNA.csv")
  24. write.csv(patient_ID,file = "mymeta.csv")
  25. #####5.2 进行DESeQ2前的预处理#####
  26. mycounts <- read.csv("mRNA.csv",row.names = 1, check.names = F) #数据矩阵
  27. mymeta <- read.csv("mymeta.csv", stringsAsFactors = T, row.names = 1) #分组矩阵
  28. rownames(mymeta) <- mymeta$id #行名改为ID,但是忘了有啥用了
  29. colnames(mycounts) == mymeta$id #检查行名列名一致性,通常全为FALSE,数据少的时候在EXCEL里手动调一下
  30. #处理行列一致性
  31. mycounts <- as.data.frame(t(mycounts)) #数值矩阵转置
  32. mycounts$V1 <- NA
  33. mycounts$V1 <- rownames(mycounts) #行名(sample名放到最后一列,相比于直接处理行名bug更少)
  34. mycounts_1 <- mycounts[match(mymeta$id, mycounts$V1), ] #将数值矩阵的行顺序按照分组矩阵的顺序更改
  35. mycounts_1 <- mycounts_1[, -ncol(mycounts_1)] #删掉最后一列(行名列)
  36. mycounts_1 <- as.data.frame(t(mycounts_1)) #转置回来
  37. colnames(mycounts_1) == mymeta$id #全为TRUE可进行下面操作,这里也可以存一下矩阵,之后再做可以不用处理直接进行DESEQ2
  38. write.csv(mycounts_1,file = "mRNA.csv")#会直接覆盖之前的
  39. write.csv(mymeta, file = "mymeta.csv")#这个没覆盖,可以覆盖一下免得弄错
  40. #####5.3 DESEQ2一条龙#####
  41. library(DESeq2)
  42. mycounts_1 <- read.csv("mRNA.csv",row.names = 1, check.names = F) #数据矩阵
  43. mymeta <- read.csv("mymeta.csv", stringsAsFactors = T, row.names = 1) #分组矩阵
  44. dds <- DESeqDataSetFromMatrix(countData = mycounts_1, #数值矩阵
  45. colData = mymeta, #分组矩阵
  46. design = ~gender) #分组依据的那个列名
  47. dds
  48. dds <- dds[rowSums(counts(dds)) > 5,] #过滤一遍,基因表达之和得大于5
  49. dds$gender<-relevel(dds$gender, ref="MALE")#谁作为参照组
  50. dds$gender
  51. table(dds$gender) #样品计数,这里要记下来一下,后面会用
  52. dds <- DESeq(dds) #进行自动差异分析
  53. res <- results(dds) #提取结果文件
  54. head(res)
  55. class(res)
  56. res_1 <- data.frame(res) #数据框化
  57. library(dplyr)
  58. res_1 %>%
  59. mutate(group = case_when(
  60. log2FoldChange >= 0 & pvalue <=0.05 ~"UP",
  61. log2FoldChange <= 0 & pvalue <=0.05 ~"DOWN",
  62. TRUE ~ "NOT_CHANGE"
  63. )) -> res_2 #区分上下调基因,其中条件可自选,条件在列名里看
  64. head(res_2)
  65. table(res_2$group) #上下调基因数量
  66. res_2$symbol <- row.names(res_2) #加一列存下symbol后面会用
  67. write.csv(res_2, file = "diff_expr_results.csv") #保存差异基因文件,可以自己根据这个分析,也可以跟我这走走流程

TCGA命名规则:一文讲清TCGA数据库中样本编码信息 - 知乎一文讲清TCGA数据库中样本编码信息 TCGA的样本命名 Sample:其中编号01~09表示肿瘤,10~19表示正常对照。(区分正常和癌症样本的凭证)CodeDefinition 01Primary Soild Tumor(原发性实体肿瘤) 02Recurrent Soild …https://zhuanlan.zhihu.com/p/564801425

六、可视化

  1. #####六、富集分析#####
  2. ######6.1 GO分析#####
  3. #采取方法up和down gene分别富集
  4. library(org.Hs.eg.db)
  5. library(clusterProfiler)
  6. library(stringr)
  7. library(ggplot2)
  8. upgene <- res_2[res_2$group == "UP", ]
  9. upggoBP <- enrichGO(upgene$symbol, org.Hs.eg.db, keyType = "SYMBOL",ont = "BP",
  10. pvalueCutoff = 0.05, pAdjustMethod = "BH", qvalueCutoff = 0.2,
  11. minGSSize = 10, maxGSSize = 500, readable = FALSE, pool = FALSE)
  12. upGOBP <- upggoBP@result %>%
  13. mutate(GeneRatio_a = as.numeric(str_extract(GeneRatio, "\\d+")),
  14. BgRatio_a = as.numeric(str_extract(BgRatio, "\\d+")),
  15. RichFactor = GeneRatio_a / BgRatio_a)
  16. write.csv(upGOBP, 'UPGOBP.csv')
  17. downgene <- res_2[res_2$group == "DOWN", ]
  18. downggoBP <- enrichGO(downgene$symbol, org.Hs.eg.db, keyType = "SYMBOL",ont = "BP",
  19. pvalueCutoff = 0.05, pAdjustMethod = "BH", qvalueCutoff = 0.2,
  20. minGSSize = 10, maxGSSize = 500, readable = FALSE, pool = FALSE)
  21. downGOBP <- downggoBP@result %>%
  22. mutate(GeneRatio_a = as.numeric(str_extract(GeneRatio, "\\d+")),
  23. BgRatio_a = as.numeric(str_extract(BgRatio, "\\d+")),
  24. RichFactor = GeneRatio_a / BgRatio_a)
  25. write.csv(downGOBP, 'downGOBP.csv')
  26. # GO分析的双侧柱状图
  27. upGOBP <- read.csv("UPGOBP.csv",row.names = 1)
  28. downGOBP <- read.csv("downGOBP.csv", row.names = 1)
  29. upGOBP$Group <- NA
  30. upGOBP$Group = 1
  31. downGOBP$Group <- NA
  32. downGOBP$Group = -1
  33. upGOBP$Description<-sub("(.)", "\\U\\1",upGOBP$Description,perl=TRUE)
  34. downGOBP$Description<-sub("(.)", "\\U\\1",downGOBP$Description,perl=TRUE)
  35. upGOBP.sorted <- upGOBP[order(upGOBP$pvalue), ] # 根据pvalue从小到大排序
  36. upGOBP <- upGOBP.sorted[1:20, ] # 选择前20行
  37. downGOBP.sorted <- downGOBP[order(downGOBP$pvalue), ] # 根据pvalue从小到大排序
  38. downGOBP <- downGOBP.sorted[1:20, ] # 选择前20行
  39. dat=rbind(upGOBP,downGOBP)
  40. colnames(dat)
  41. dat$group <- NA
  42. dat$group[which(dat$Group >0)]='up'
  43. dat$group[which(dat$Group <0)]='down'
  44. dat$RichFactor = dat$RichFactor*dat$Group
  45. dat <- dat[dat$pvalue<0.05,]
  46. gk_plot <-
  47. ggplot(dat,aes(reorder(Description, RichFactor),RichFactor,fill = group))+
  48. geom_col()+
  49. theme_bw()+
  50. theme(panel.grid.major=element_blank(),
  51. panel.grid.minor=element_blank(),
  52. panel.border = element_blank(),
  53. legend.title = element_blank(),
  54. axis.text = element_text(color="black",size=15),
  55. axis.line.x = element_line(color='black'),
  56. axis.ticks.y = element_blank(),
  57. axis.text.y = element_blank(),
  58. legend.position = 'right')+
  59. coord_flip()+
  60. geom_segment(aes(y=0, yend=0,x=0,xend=41))+ #y轴长度调整
  61. geom_text(data = dat[which(dat$RichFactor>0),],aes(x=Description, y=-0.01, label=Description),
  62. hjust=1, size=5)+
  63. geom_text(data = dat[which(dat$RichFactor<0),],aes(x=Description, y=0.01, label=Description),
  64. hjust=0, size=5)+
  65. geom_text(data = dat[which(dat$RichFactor>0),],aes(label=sprintf("%.2e", pvalue)),
  66. hjust=-0.1, size=5, color='red')+
  67. geom_text(data = dat[which(dat$RichFactor<0),],aes(label=sprintf("%.2e", pvalue)),
  68. hjust=1.1, size=5, color="red")+
  69. scale_fill_manual(values = c("#fb6a4a","#3182bd"), breaks = c("up", "down"))+
  70. scale_x_discrete(expand = expansion(mult = c(0,0)))+
  71. ylim(-1, 1)+
  72. labs(x='', y='RichFactor')+
  73. theme(legend.text = element_text(size = 12),
  74. axis.title.x = element_text(size = 14))+
  75. ggtitle("GO BP of The Top 20 Most Significant P-values")+
  76. theme(plot.title = element_text(hjust = 0.5, size = 20))
  77. gk_plot
  78. #####6.2 KEGG分析#####
  79. #唯一注意的一点就是把它换为ENTREZID,再换回去
  80. library(clusterProfiler)
  81. library(stringr)
  82. upgene <- res_2[res_2$group == "UP", ]
  83. genes <- bitr(upgene$symbol, fromType = "SYMBOL", toType = "ENTREZID", OrgDb = "org.Hs.eg.db")
  84. genes <- genes[,2]
  85. ekegg <- enrichKEGG(genes, organism = 'hsa',
  86. pvalueCutoff = 0.05,pAdjustMethod = 'BH',qvalueCutoff = 0.2,
  87. minGSSize=10,maxGSSize=500,use_internal_data=F)
  88. ekegg <- setReadable(ekegg, 'org.Hs.eg.db','ENTREZID')
  89. upKEGG <- ekegg@result %>%
  90. mutate(GeneRatio_a = as.numeric(str_extract(GeneRatio, "\\d+")),
  91. BgRatio_a = as.numeric(str_extract(BgRatio, "\\d+")),
  92. RichFactor = GeneRatio_a / BgRatio_a)
  93. write.csv(upKEGG, 'UPKEGG.csv')
  94. downgene <- res_2[res_2$group == "DOWN", ]
  95. genes <- downgene$symbol
  96. genes <- bitr(genes, fromType = "SYMBOL", toType = "ENTREZID", OrgDb = "org.Hs.eg.db")
  97. genes <- genes[,2]
  98. ekegg <- enrichKEGG(genes, organism = 'hsa',
  99. pvalueCutoff = 0.05,pAdjustMethod = 'BH',qvalueCutoff = 0.2,
  100. minGSSize=10,maxGSSize=500,use_internal_data=F)
  101. ekegg <- setReadable(ekegg, 'org.Hs.eg.db','ENTREZID')
  102. downKEGG <- ekegg@result %>%
  103. mutate(GeneRatio_a = as.numeric(str_extract(GeneRatio, "\\d+")),
  104. BgRatio_a = as.numeric(str_extract(BgRatio, "\\d+")),
  105. RichFactor = GeneRatio_a / BgRatio_a)
  106. write.csv(downKEGG, 'downKEGG.csv')
  107. #画图偷懒直接移花接木
  108. #upGOBP <- read.csv("UPKEGG.csv",row.names = 1)
  109. #downGOBP <- read.csv("downKEGG.csv", row.names = 1)
  110. #####七、单个基因分析#####
  111. #基因表达箱线图
  112. pTSPAN6d <- plotCounts(dds, gene="TSPAN6", intgroup="gender", returnData=TRUE) #提取数据
  113. library(ggsignif)
  114. pTSPAN6 <- ggplot(pTSPAN6d, aes(x=gender, y=count)) +
  115. geom_boxplot(aes(fill=gender)) +
  116. scale_y_log10() +
  117. theme_bw() +
  118. labs(x = " ", y = "Relative Counts", fill = "Gender") +
  119. ggtitle("TSPAN6")+
  120. #theme(legend.position = "none")+
  121. #加上就是不要图例
  122. geom_signif(comparisons = list(c("MALE", "FEMALE")),
  123. annotations = c("***"), #这里查看差异基因表手动改相关系数星星
  124. y_position = c(3, 3), #这里调p值横线线的高低
  125. tip_length = c(0, 0)) + #这里调小撇撇的长短
  126. annotate("text", x = 1, y = 0, label = "(n=13)", #数量看前面那个记住的东西
  127. vjust = 4, hjust = 0.5, size = 4, fontface = "bold") +
  128. annotate("text", x = 2, y = 0, label = "(n=14)", #数量看前面那个记住的东西
  129. vjust = 4, hjust = 0.5, size = 4, fontface = "bold") +
  130. coord_cartesian(clip = "off") +
  131. theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
  132. axis.title.x = element_text(size = 18, face = "bold"),
  133. axis.title.y = element_text(size = 18, face = "bold"),
  134. axis.text = element_text(size = 18, face = "bold"),
  135. plot.title = element_text(size = 18, face = "bold.italic"),
  136. legend.title = element_text(size = 10, face = "bold"))
  137. pTSPAN6
  138. #其余同理还可以拼图
  139. library(patchwork)
  140. (pTSPAN6 + pa) / (pb + pc) +
  141. plot_layout(guides = 'collect')
  142. #####八、火山图#####
  143. library(ggrepel)
  144. library(ggplot2)
  145. library(pheatmap)
  146. ##筛选条件设置
  147. log2FC_cutoff = 0.5
  148. pvalue_cutoff = 0.05
  149. ##选取差异分析结果
  150. need_DEG <- res_1[,c(2,5)] #选取log2FoldChange, pvalue信息
  151. colnames(need_DEG) <- c('log2FoldChange','pvalue')
  152. need_DEG$significance <- as.factor(ifelse(need_DEG$pvalue < pvalue_cutoff & abs(need_DEG$log2FoldChange) > log2FC_cutoff,
  153. ifelse(need_DEG$log2FoldChange > log2FC_cutoff ,'UP','DOWN'),'NOT_CHANGE'))
  154. title <- paste0(' Up : ',nrow(need_DEG[need_DEG$significance =='UP',]) ,
  155. '\n Down : ',nrow(need_DEG[need_DEG$significance =='DOWN',]),
  156. '\n |Log2FoldChange| >= ',round(log2FC_cutoff,3))
  157. ggplot(data=need_DEG,
  158. aes(x=log2FoldChange, y=-log10(pvalue),
  159. color=significance)) +
  160. #点和背景
  161. geom_point(alpha=0.4, size=1) +
  162. theme_classic()+ #无网格线
  163. #坐标轴
  164. xlab("log2 ( FoldChange )") +
  165. ylab("-log10 ( pvalue)") +
  166. #标题文本
  167. ggtitle( title ) +
  168. #分区颜色
  169. scale_colour_manual(values = c('blue','grey','red'))+
  170. #辅助线
  171. geom_vline(xintercept = c(-log2FC_cutoff,log2FC_cutoff),lty=4,col="grey",lwd=0.8) +
  172. geom_hline(yintercept = -log10(pvalue_cutoff),lty=4,col="grey",lwd=0.8) +
  173. #图例标题间距等设置
  174. theme(plot.title = element_text(hjust = 0.5),
  175. plot.margin=unit(c(2,2,2,2),'lines'), #上右下左
  176. legend.title = element_blank(), #不显示图例标题
  177. legend.position="right") + #图例位置
  178. #添加标签
  179. geom_text_repel(data = filter(res_2, abs(log2FoldChange) > 5 & -log10(pvalue) > 5),
  180. max.overlaps = getOption("ggrepel.max.overlaps", default = 20),
  181. aes(label = symbol,
  182. color = group),
  183. size = 2)
  184. #####九、差异表达热图#####
  185. #needDEG见上
  186. gene_up <- rownames(need_DEG[with(need_DEG,log2FoldChange>log2FC_cutoff & pvalue<pvalue_cutoff),])
  187. gene_down <- rownames(need_DEG[with(need_DEG,log2FoldChange< -log2FC_cutoff & pvalue<pvalue_cutoff),])
  188. df02 <- c(head(gene_up, 10), #取前10 padj上下调基因名
  189. head(gene_down, 10))
  190. #df02 <- c(gene_up,gene_down) #取所有
  191. #用counts来画图
  192. diff_expr <- mycounts_1[intersect(rownames(mycounts_1),df02),]
  193. ## 用标准化(标准化Counts值) 来画图
  194. #vsd <- vst(dds, blind = FALSE)
  195. #normalizeExp <- assay(vsd)
  196. ## 差异基因的标准化Count
  197. #diff_expr <- normalizeExp[intersect(rownames(normalizeExp),df02),]
  198. #head(diff_expr)
  199. ## 差异热图
  200. library(pheatmap)
  201. annotation_col <- data.frame(Group = factor(c(rep("MALE",78), rep("FEMALE",59))))#前面记住的
  202. rownames(annotation_col) <- colnames(diff_expr)
  203. p <- pheatmap(diff_expr,
  204. annotation_col = annotation_col,
  205. color = colorRampPalette(c("#8854d0", "#ffffff","#fa8231"))(50),
  206. cluster_cols = F,
  207. show_rownames = F,
  208. show_colnames = F,
  209. scale = "row", ## none, row, column
  210. fontsize = 12,
  211. fontsize_row = 12,
  212. fontsize_col = 6,
  213. border = FALSE)
  214. p

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/915019
推荐阅读
相关标签
  

闽ICP备14008679号