R语言绘制精美图形 | 火山图 | 学习笔记

一边学习,一边总结,一边分享!

教程图形

前言

最近的事情较多,教程更新实在是跟不上,主要原因是自己没有太多时间来学习和整理相关的内容。一般在下半年基本都是非常忙,所有一个人的精力和时间有限,只能顾一方面。所以,长时间不更新是很正常的,若在看本教程的你,若有愿意分享的教程,可以投稿,我们也欢迎投稿。

今天,来分享一下近两天自己的学习笔记。火山图,此图也是实用性很强,80%的同学应该可以用得到,今天分享的只是学习笔记的一部分,后面会逐渐完善。既然是学习笔记,那么我们也有参考的教程,我们也会再文末附上参考的教程,大家也可以直接到对应教程中学习。

原文访问链接:
https://mp.weixin.qq.com/s/mQ9TaQu3b3waNHtu8gfQtw

设置路劲

setwd("E:\\小杜的生信筆記\\2023\\20231117-火山图")
rm(list = ls())

加载相关包

library(ggplot2)
library(RColorBrewer)
library(ggrepel)
library(RUnit)
library(ggforce)
library(tidyverse)
library(ggpubr)
library(ggprism)
library(paletteer)

1、加载及处理数据

加载数据

df <- read.csv("all.limmaOut.csv",header = T,row.names = 1)
head(df)

1.2 数据分类

使用runif对添加数据logCMP,用于后续的分析

df$logCMP <- stats::runif(12035, 0, 16)

对数据进行UpDown分类
分类标准:

  1. P值小于0.05
  2. |logFC| >= 1
    筛选标准可以进行自己的需求进行设置
##'@判断基因up or down

df$Group <- factor(ifelse(df$P.Value < 0.05 & abs(df$logFC) >= 1,
                          ifelse(df$logFC >= 1, 'Up','Down'),'NotSignifi'))
df[1:10,1:8]

table(df$Group)


添加基因名,用于后续的火山图显示基因名使用

df$gene <- row.names(df)

1.3 设置主题

可根据自己需求进行设置,或是统一在这里设置即可。

##'@主题
mytheme <- theme(panel.background = element_rect(fill = NA),
                 plot.margin = margin(t=10,r=10,b=5,l=5,unit = "mm"),
                 # axis.ticks.y = element_blank(),
                 axis.ticks.x = element_line(colour = "grey40",size = 0.5),
                 axis.line = element_line(colour = "grey40",size = 0.5),
                 axis.text.x = element_text(size = 10),
                 axis.title.x = element_text(size = 12),
                 panel.grid.major.y = element_line(colour = NA,size = 0.5),
                 panel.grid.major.x = element_blank())

2 绘制基础差异基因火山图

2.1 绘制基础图形

####'@绘制基础图形
ggplot(df, aes(x = logFC, y = -log10(P.Value), colour = Group))+
  geom_point(size =4, shape = 20, stroke = 0.5)+
  #控制最人气泡和最小气泡,调节气泡相对大小
  scale_size(limits = c(2,16))+
  ##设置颜色
  #scale_fill_manual(values = c("#fe0000","#13fc00","#bdbdbd"))+
  scale_color_manual(values=c('steelblue','gray','brown'))+
  ylab('-log10 (Pvalue)')+
  xlab('log2 (FoldChange)')+
  ## 增加横竖线条
  geom_vline(xintercept = c(-1,1),lty = 2, col = "black", lwd = 0.5)+
  geom_hline(yintercept = -log10(0.05), lty = 2, col = "black", lwd = 0.5)

难点代码解读

1.增加横竖线条

geom_vline()添加垂直辅助线,xintercept表示辅助线的位置,lty表示线的类型(虚-实),col表示线的颜色,lwd表示线的粗细

geom_hline()添加水平辅助线,yintercept表示辅助线的位置,lty表示线的类型(虚-实),col表示线的颜色,lwd表示线的粗细

2.2 设置火山图散点的大小

在上面的图形中,火山图中所有的使用size = logCMP进行修改

ggplot(df, aes(x = logFC, y = -log10(P.Value), size = logCMP,colour = Group))+
  geom_point(shape = 20, stroke = 0.5)+
  #控制最人气泡和最小气泡,调节气泡相对大小
  scale_size(limits = c(2,16))+
  ##设置颜色
  #scale_fill_manual(values = c("#fe0000","#13fc00","#bdbdbd"))+
  scale_color_manual(values=c('steelblue','gray','brown'))+
  ylab('-log10 (Pvalue)')+
  xlab('log2 (FoldChange)')+
  ## 增加横竖线条
  geom_vline(xintercept = c(-1,1),lty = 2, col = "black", lwd = 0.5)+
  geom_hline(yintercept = -log10(0.05), lty = 2, col = "black", lwd = 0.5)

2.2 调整火山图的X轴坐标

调整X轴的取值范围
有时候,我们在绘制火山图时,会出现X或Y轴坐标较大的现象,对火山图整体美观性较差,那么适当限制基因调整图形美观.

###'@查看差异基因最大值是多少
###'@此步根据自己的火山图进行设置是否有需要设置
max(abs(df$logFC)) 

使用xlim()函数进行修改

ggplot(df, aes(x = logFC, y = -log10(P.Value), size = logCMP,colour = Group))+
  geom_point(shape = 20, stroke = 0.5)+
  #控制最人气泡和最小气泡,调节气泡相对大小
  scale_size(limits = c(2,16))+
  ##设置颜色
  #scale_fill_manual(values = c("#fe0000","#13fc00","#bdbdbd"))+
  scale_color_manual(values=c('steelblue','gray','brown'))+
  ylab('-log10 (Pvalue)')+
  xlab('log2 (FoldChange)')+
  ## 增加横竖线条
  geom_vline(xintercept = c(-1,1),lty = 2, col = "black", lwd = 0.5)+
  geom_hline(yintercept = -log10(0.05), lty = 2, col = "black", lwd = 0.5)+
  ##设置X轴的取值范围
  xlim(c(-1.5,1.5))

2.3 修改图中图例

使用ggplot()绘图最方便就是修改图形或调整图形很方便,但是很多时间都需要我们自己不断的练习,加深自己印象。
使用label()修改图中标题和图例

ggplot(df, aes(x = logFC, y = -log10(P.Value), size = logCMP,colour = Group))+
  geom_point( shape = 20, stroke = 0.5)+
  #控制最人气泡和最小气泡,调节气泡相对大小
  scale_size(limits = c(2,16))+
  ##设置颜色
  #scale_fill_manual(values = c("#fe0000","#13fc00","#bdbdbd"))+
  scale_color_manual(values=c('steelblue','gray','brown'))+
  # ylab('-log10 (Pvalue)')+
  # xlab('log2 (FoldChange)')+
    labs(x = 'log2 (FoldChange)',
         y = '-log10 (Pvalue)',
         ## 图例
         fill = "",
         size = "")+
# ## 增加横竖线条
  geom_vline(xintercept = c(-1,1),lty = 2, col = "black", lwd = 0.5)+
  geom_hline(yintercept = -log10(0.05), lty = 2, col = "black", lwd = 0.5)+
  ## 设置主题
  theme_classic(
    base_line_size = 0.8  ## 设置坐标轴的粗细
  )+
  ## 设置图例大小
  guides(fill = guide_legend(override.aes = list(size = 8)))

2.4 添加基因名

使用一下命令添加标记基因名字

#'@添加关注的点的基因名
  geom_text_repel(
    data = df[df$P.Value < 0.05 & abs(df$logFC) > 1,],
    aes(label = gene),
    size = 4.5,
    color = "black",
    segment.color = "black", show.legend = FALSE)
ggplot(df, aes(x = logFC, y = -log10(P.Value), size = logCMP,colour = Group))+
  geom_point( shape = 20, stroke = 0.5)+
  #控制最人气泡和最小气泡,调节气泡相对大小
  scale_size(limits = c(2,16))+
  ##设置颜色
  #scale_fill_manual(values = c("#fe0000","#13fc00","#bdbdbd"))+
  scale_color_manual(values=c('steelblue','gray','brown'))+
  ylab('-log10 (Pvalue)')+
  xlab('log2 (FoldChange)')+
#'@添加关注的点的基因名
  geom_text_repel(
    data = df[df$P.Value < 0.05 & abs(df$logFC) > 1,],
    aes(label = gene),
    size = 4.5,
    color = "black",
    segment.color = "black", show.legend = FALSE)+
  # ## 增加横竖线条
  geom_vline(xintercept = c(-1,1),lty = 2, col = "black", lwd = 0.5)+
  geom_hline(yintercept = -log10(0.05), lty = 2, col = "black", lwd = 0.5)+
  ## 设置主题
  theme_classic(
    base_line_size = 0.8  ## 设置坐标轴的粗细
  )+
  ## 设置图例大小
  guides(fill = guide_legend(override.aes = list(size = 8)))

2.5 图形美化

ggplot(df, aes(x = logFC, y = -log10(P.Value), size = logCMP,colour = Group))+
  geom_point( shape = 20, stroke = 0.5)+
  #控制最人气泡和最小气泡,调节气泡相对大小
  scale_size(limits = c(2,16))+
  ##设置颜色
  #scale_fill_manual(values = c("#fe0000","#13fc00","#bdbdbd"))+
  scale_color_manual(values=c('steelblue','gray','brown'))+
  ylab('-log10 (Pvalue)')+
  xlab('log2 (FoldChange)')+
#'@添加关注的点的基因名
  geom_text_repel(
    data = df[df$P.Value < 0.05 & abs(df$logFC) > 1,],
    aes(label = gene),
    size = 3.5,
    color = "black",
    segment.color = "black", show.legend = FALSE)+
  # ## 增加横竖线条
  geom_vline(xintercept = c(-1,1),lty = 2, col = "black", lwd = 0.5)+
  geom_hline(yintercept = -log10(0.05), lty = 2, col = "black", lwd = 0.5)+
  ## 设置主题
  theme_classic(
    base_line_size = 0.8  ## 设置坐标轴的粗细
  )+
  ## 设置图例大小
  guides(fill = guide_legend(override.aes = list(size = 5)))+
  mytheme
  ##设置主题
  # theme(axis.title.x = element_text(color = "black", 
  #                                   size = 10,
  #                                   face = "bold"),
  #       axis.title.y = element_text(color = "black",
  #                                   size = 10),
  #       ##'@设置图例
  #       legend.text = element_text(color = "red",
  #                                  size = 8,
  #                                  face = "bold"))

解读

  theme(axis.title.x = element_text(color = "black",
                                    size = 10,
                                    face = "bold"),
        axis.title.y = element_text(color = "black",
                                    size = 10),
        ##'@设置图例
        legend.text = element_text(color = "red",
                                   size = 8,
                                   face = "bold"))
  1. X轴、Y轴字体调整axis.title.x/axis.title.y
    colorsizebold表示;颜色、大小、加粗
  2. 图例legend.text

3 渐变火山图绘制

该教程在前面的文章中已经发出,感兴趣的可以自己查看。教程链接差异表达基因火山图绘制

3.1 数据处理

head(df)

把各列数据整理成画图所需的格式

### Score列、或是DESep输出数据
fc <- df$AveExpr
head(fc)
names(fc) <- rownames(dat)  ## 匹配数据

### -log10P列
 p <- dat$`-log10P`
names(p) <- names(dat)

3.2 自定义颜色

mycol <- c("#B2DF8A","#FB9A99","#33A02C","#E31A1C","#B15928","#6A3D9A","#CAB2D6","#A6CEE3","#1F78B4","#FDBF6F","#999999","#FF7F00")
cols.names <- unique(df$Group)
cols.code <- mycol[1:length(cols.names)]
names(cols.code) <- cols.names
col <- paste(cols.code[as.character(df$Group)],"BB", sep="")
i <-  df$Group %in% c("Up","Not","Down")

###'@-log10P列
p <- -log10(df$P.Value)
names(p) <- names(df)

###'@size列
size = df$logCMP
names(size) <- rownames(df)

###'@pval列
pp <- df$P.Value
names(pp) <- rownames(df)

3.3 绘图

plot(df, p, log = 'y',
      col = paste(cols.code[as.character(df$logCMP)], "BB", sep = ""),
     pch = 16,
     # ylab = bquote(~Log[10]~"P value"), 
     # xlab = "Enrich score",
     # 用小泡泡画不感兴趣的pathway
     cex = ifelse(i, size,1)
     )


# 添加横线
abline(h=1/0.05, lty=2, lwd=1)
abline(h=1/max(pp[which(p.adjust(pp, "bonf") < 0.001)]), lty=3, lwd=1) #标黑圈和文字的阈值

# 添加竖线
abline(v=-0.5, col="blue", lty=2, lwd=1)
abline(v=0.5, col="red", lty=2, lwd=1


w <- which(p.adjust(pp,"bonf") < 0.001) #bonferroni correction
points(fc[w], p[w], pch=1, cex=ifelse(i[w], dat[w,"size"],1))
## Add an alpha value to a colour
add.alpha <- function(col, alpha=1){
  if(missing(col))
    stop("Please provide a vector of colours.")
  apply(sapply(col, col2rgb)/255, 2, 
        function(x) 
          rgb(x[1], x[2], x[3], alpha=alpha))  
}
## 标记最显著的基因
cols.alpha <- add.alpha(cols.code[dat[w,]$group], alpha=0.6)
text(fc[w], p[w], names(fc[w]), 
     pos=4, #1, 2, 3 and 4, respectively indicate positions below, to the left of, above and to the right of the specified coordinates.
     col=cols.alpha)


# 添加size的图例
par(xpd = TRUE) #all plotting is clipped to the figure region
f <- c(0.01,0.05,0.1,0.25)
s <- sqrt(f*50)
legend("topright",
       inset=c(-0.2,0), #把图例画到图外
       legend=f, pch=16, pt.cex=s, bty='n', col=paste("#88888888"))

# 添加pathway颜色的图例
legend("bottomright", 
       inset=c(-0.25,0), #把图例画到图外
       pch=16, col=cols.code, legend=cols.names, bty="n")

4. 筛选Top5的差异基因进行标记

4.1 筛选的down和up前5个(或N个)基因进行标记

##down
down <- filter(df, Group == "Down") %>% 
  distinct(gene, .keep_all = T) %>%
  top_n(5, -log10(P.Value))

##up top 5
up <- filter(df, Group == "Up") %>% 
  distinct(gene, .keep_all = T) %>%
  top_n(5, -log10(P.Value))
  

4.2绘图

ggplot(df, aes(x = logFC, y = -log10(P.Value), size = logCMP,colour = Group))+
  geom_point( shape = 20, stroke = 0.5)+
  #控制最人气泡和最小气泡,调节气泡相对大小
  scale_size(limits = c(2,16))+
  ##设置颜色
  #scale_fill_manual(values = c("#fe0000","#13fc00","#bdbdbd"))+
  scale_color_manual(values=c('steelblue','gray','brown'))+
  #scale_colour_manual(name = "", values = alpha(c("#EB4232","#d8d8d8","#2DB2EB"), 0.7)) +
  ##'@X轴和Y轴限制
  # scale_x_continuous(limits = c(-12, 12),breaks = seq(-12, 12, by = 4)) + 
  # scale_y_continuous(expand = expansion(add = c(0, 0)),limits = c(0, 180),breaks = seq(0, 180, by = 20)) + 
  ylab('-log10 (Pvalue)')+
  xlab('log2 (FoldChange)')+
#'@添加关注的点的基因名
#'@添加down top gene
  geom_text_repel(
    data = up,aes(x = logFC, y = -log10(P.Value), label = gene),
                      seed = 123,color = 'black',show.legend = FALSE, 
                      min.segment.length = 0,#始终为标签添加指引线段;若不想添加线段,则改为Inf
                      segment.linetype = 1, #线段类型,1为实线,2-6为不同类型虚线
                      force = 2,#重叠标签间的排斥力
                      force_pull = 2,#标签和数据点间的吸引力
                      size = 4,
                      box.padding = unit(2, "lines"),
                      point.padding = unit(1, "lines"),#点到线的距离
                      max.overlaps = Inf)+
  ##'@添加up top gene
  geom_text_repel(
    data = down,aes(x = logFC, y = -log10(P.Value), label = gene),
                      seed = 123,
    color = 'black',show.legend = FALSE, 
                      min.segment.length = 0,#始终为标签添加指引线段;若不想添加线段,则改为Inf
                      segment.linetype = 1, #线段类型,1为实线,2-6为不同类型虚线
                      force = 6,#重叠标签间的排斥力
                      force_pull = 1,#标签和数据点间的吸引力
                      size = 4,
                      box.padding = unit(2, "lines"),
                      point.padding = unit(1, "lines"),#点到线的距离
                      max.overlaps = Inf)+
  # ## 增加横竖线条
  geom_vline(xintercept = c(-1,1),lty = 2, col = "black", lwd = 0.5)+
  geom_hline(yintercept = -log10(0.05), lty = 2, col = "black", lwd = 0.5)+
  ## 设置主题
  theme_classic(
    base_line_size = 0.8  ## 设置坐标轴的粗细
  )+
  ## 设置图例大小
  guides(fill = guide_legend(override.aes = list(size = 5)))+
  mytheme

4.3 对齐标签

需要重新进行调整坐标信息,此坐标位置,可以根据自己需求进行调整

nudge_x_up = 2.5 - up$logFC
nudge_x_down = -2.5 - down$logFC

通过添加nudge_x信息即可实现此功能

ggplot(df, aes(x = logFC, y = -log10(P.Value), size = logCMP,colour = Group))+
  geom_point( shape = 20, stroke = 0.5)+
  #控制最人气泡和最小气泡,调节气泡相对大小
  scale_size(limits = c(2,16))+
  ##设置颜色
  #scale_fill_manual(values = c("#fe0000","#13fc00","#bdbdbd"))+
  scale_color_manual(values=c('steelblue','gray','brown'))+
  #scale_colour_manual(name = "", values = alpha(c("#EB4232","#d8d8d8","#2DB2EB"), 0.7)) +
  ##'@X轴和Y轴限制
  # scale_x_continuous(limits = c(-12, 12),breaks = seq(-12, 12, by = 4)) + 
  # scale_y_continuous(expand = expansion(add = c(0, 0)),limits = c(0, 180),breaks = seq(0, 180, by = 20)) + 
  ylab('-log10 (Pvalue)')+
  xlab('log2 (FoldChange)')+
#'@添加关注的点的基因名
#'@添加down top gene
  geom_text_repel(
    data = up,aes(x = logFC, y = -log10(P.Value), label = gene),
                      seed = 123,color = 'black',show.legend = FALSE, 
                      min.segment.length = 0,#始终为标签添加指引线段;若不想添加线段,则改为Inf
                      segment.linetype = 1, #线段类型,1为实线,2-6为不同类型虚线
                      segment.color = 'black', #线段颜色
                      segment.alpha = 0.5, #线段不透明度
                      nudge_x = nudge_x_up, #标签x轴起始位置调整
                      direction = "y", #按y轴调整标签位置方向,若想水平对齐则为x
                      hjust = 0, #对齐标签:0右对齐,1左对齐,0.5居中
                      force = 2,#重叠标签间的排斥力
                      force_pull = 2,#标签和数据点间的吸引力
                      size = 4,
                      box.padding = unit(0.1, "lines"),
                      point.padding = unit(0.1, "lines"),
                      max.overlaps = Inf)+
  ##'@添加up top gene
  geom_text_repel(
    data = down,aes(x = logFC, y = -log10(P.Value), label = gene),
                      seed = 123,color = 'black',show.legend = FALSE, 
                      min.segment.length = 0,#始终为标签添加指引线段;若不想添加线段,则改为Inf
                      segment.linetype = 1, #线段类型,1为实线,2-6为不同类型虚线
                      segment.color = 'black', #线段颜色
                      segment.alpha = 0.5, #线段不透明度
                      nudge_x = nudge_x_down, #标签x轴起始位置调整
                      direction = "y", #按y轴调整标签位置方向,若想水平对齐则为x
                      hjust = 1, #对齐标签:0右对齐,1左对齐,0.5居中
                      force = 2,#重叠标签间的排斥力
                      force_pull = 2,#标签和数据点间的吸引力
                      size = 4,
                      box.padding = unit(0.1, "lines"),
                      point.padding = unit(0.1, "lines"),
                      max.overlaps = Inf)+
  # ## 增加横竖线条
  geom_vline(xintercept = c(-1,1),lty = 2, col = "black", lwd = 0.5)+
  geom_hline(yintercept = -log10(0.05), lty = 2, col = "black", lwd = 0.5)+
  ## 设置主题
  theme_classic(
    base_line_size = 0.8  ## 设置坐标轴的粗细
  )+
  ## 设置图例大小
  guides(fill = guide_legend(override.aes = list(size = 5)))

4.4 添加箭头

top5 <- filter(df, Group != "Stable") %>% distinct(gene, .keep_all = T) %>% top_n(5, -log10(P.Value))
ggplot(df, aes(x = logFC, y = -log10(P.Value), size = logCMP,colour = Group))+
  geom_point( shape = 20, stroke = 0.5)+
  #控制最人气泡和最小气泡,调节气泡相对大小
  scale_size(limits = c(2,16))+
  ##设置颜色
  #scale_fill_manual(values = c("#fe0000","#13fc00","#bdbdbd"))+
  scale_color_manual(values=c('steelblue','gray','brown'))+
  #scale_colour_manual(name = "", values = alpha(c("#EB4232","#d8d8d8","#2DB2EB"), 0.7)) +
  ##'@X轴和Y轴限制
  # scale_x_continuous(limits = c(-12, 12),breaks = seq(-12, 12, by = 4)) + 
  # scale_y_continuous(expand = expansion(add = c(0, 0)),limits = c(0, 180),breaks = seq(0, 180, by = 20)) + 
  ylab('-log10 (Pvalue)')+
  xlab('log2 (FoldChange)')+
  ##'@添加箭头
  geom_text_repel(data = top5,aes(x = logFC, y = -log10(P.Value), label = gene),
                      seed = 2345,color = 'black',show.legend = FALSE, 
                      min.segment.length = 1,#始终为标签添加指引线段;若不想添加线段,则改为Inf
                      arrow = arrow(length = unit(0.02, "npc"),type = "open", ends = "last"),
                      force = 10,force_pull = 1,
                      size = 4,
                      box.padding = 2,point.padding = 1,
                      max.overlaps = Inf)

5 渐变火山图

5.1 加载所需的包

#devtools::install_github("BioSenior/ggvolcano")
library(ggVolcano)
library(RColorBrewer)

5.2 绘图

df[1:10,1:9]

gradual_volcano(df, x = "logFC", y = "P.Value",
                      label = "gene", 
                label_number = 5, ## 显示top5的基因名
                output = FALSE)


修改显示颜色

gradual_volcano(df, x = "logFC", y = "P.Value",
                label = "gene", 
                fills = brewer.pal(5, "RdYlBu"),
                colors = brewer.pal(8, "RdYlBu"),
                label_number = 5, ## 显示top5的基因名
                output = FALSE)


使用RColorBrewer进行修改颜色

gradual_volcano(df, x = "logFC", y = "P.Value",
                label = "gene", 
                label_number = 5, ## 显示top5的基因名
                output = FALSE)+
  ggsci::scale_color_gsea()+
  ggsci::scale_fill_gsea()

5.3 GO通路火山图

或你有相关GO注释文件,你可以提供给相关的数据,进行绘制。

在这里,我们不在演示,若你需要,可以根据原文的方法进行绘制图形。

ata("term_data")
#  Gene.names   term
#1       TDP1 myelin
#2    YDR387C myelin
#3      MAM33 myelin
#4       BAR1 myelin
#5       IQG1 myelin
#6       AIM3 myelin

p1 <- term_volcano(deg_data, term_data,
                   x = "log2FoldChange", y = "padj",
                   label = "row", label_number = 10, output = FALSE)
#修改散点颜色和描边
library(RColorBrewer)
deg_point_fill <- brewer.pal(5, "RdYlBu")
names(deg_point_fill) <- unique(term_data$term)
p2 <- term_volcano(data, term_data,
                   x = "log2FoldChange", y = "padj",
                   normal_point_color = "#75aadb",
                   deg_point_fill = deg_point_fill,
                   deg_point_color = "grey",
                   legend_background_fill = "#deeffc",
                   label = "row", label_number = 10, output = FALSE)

本教程参考链接:<学习者可以直接访问原文链接>

  1. https://mp.weixin.qq.com/s/wkUxY_zzYnCDwAPD0btHow
  2. https://mp.weixin.qq.com/s/R6yb-sFKRkzGuACs61TbsQ
  3. https://mp.weixin.qq.com/s/TWI-Tt741Gqe9ERzZr23yg
  4. https://mp.weixin.qq.com/s/yVahDcmuUU7cPikTt4ahNg

往期文章:

1. 复现SCI文章系列专栏

2. 《生信知识库订阅须知》,同步更新,易于搜索与管理。

3. 最全WGCNA教程(替换数据即可出全部结果与图形)

  • WGCNA分析 | 全流程分析代码 | 代码一

  • WGCNA分析 | 全流程分析代码 | 代码二

  • WGCNA分析 | 全流程代码分享 | 代码三

  • WGCNA分析 | 全流程分析代码 | 代码四

  • WGCNA分析 | 全流程分析代码 | 代码五(最新版本)


4. 精美图形绘制教程

  • 精美图形绘制教程

5. 转录组分析教程

转录组上游分析教程[零基础]

小杜的生信筆記 ,主要发表或收录生物信息学的教程,以及基于R的分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Rockdb简介

背景 最近在使用flink的过程中&#xff0c;由于要存储的状态很大&#xff0c;所以使用到了rockdb作为flink的后端存储&#xff0c;本文就来简单看下rockdb的架构设计 Rockdb设计 Rockdb采用了LSM的结构&#xff0c;它和hbase很像&#xff0c;不过严格的说&#xff0c;基于LS…

【Linux】安全审计-audit

文章目录 一、audit简介二、开启auditd服务三、相关文件四、审计规则五、审计日志查询及分析附录1&#xff1a;auditctl -h附录2&#xff1a;systemcall 类型 参考文章&#xff1a; 1、安全-linux audit审计使用入门 2、audit详细使用配置 3、Linux-有哪些常见的System Call&a…

redis实战篇(2)

优惠卷秒杀 通过本章节&#xff0c;我们可以学会Redis的计数器功能&#xff0c; 结合Lua完成高性能的redis操作&#xff0c;同时学会Redis分布式锁的原理&#xff0c;包括Redis的三种消息队列 3、优惠卷秒杀 3.1 -全局唯一ID 每个店铺都可以发布优惠券&#xff1a; 当用户抢…

卷积神经网络(CNN)鲜花的识别

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3. 检查数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、构建CNN网络四、编译五、训练模型六、模型评估 前期工作 1. 设置GP…

IP池大小重要吗?

我们在寻找靠谱的IP代理时也经常遇到一个问题&#xff0c;IP代理池是什么&#xff1f;大小有何影响。今天就来跟大家普及一下&#xff0c;IP代理池大小的是否重要&#xff1f; 一、IP代理池是什么&#xff1f; I\P代理池是一个存储大量代理服务器IP地址的集合。它是一个由多个…

【MMC/SD/SDIO】读写操作

SD 总线是基于命令和数据流&#xff0c;它们由一个开始 Bit 发起&#xff0c;由一个停止 Bit 结束。 Command&#xff1a;命令开始一个操作。命令由 Host 驱动&#xff0c;或者给单卡&#xff08;寻址命令&#xff09;&#xff0c;或者给所有连接的卡&#xff08;广播命令&…

【操作系统】虚拟内存浅析

文章目录 虚拟内存的概念虚拟内存的实现请求分页存储管理缺页中断机构地址变换机构页面置换算法页面分配策略调入页面的时机 虚拟内存的概念 所谓的虚拟内存&#xff0c;是具有请求调入和置换功能&#xff0c;从逻辑上对内存容量加以扩充的一种存储器系统。他的组成如下&#…

微软 Gradle 强强联手,Gradle 构建服务器正式开源!

作者&#xff1a;Nick Zhu - Senior Program Manager, Developer Division At Microsoft 排版&#xff1a;Alan Wang Gradle 构建服务器 (Build Server for Gradle) 在九月份&#xff0c;我们宣布 Microsoft 和 Gradle 联手探索了一种基于 Build Server Protocol&#xff08;B…

【SpringMvc】SpringMvc +MyBatis整理

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理 Java 框架 中 SpringMVC的知识点和值得注意的地方 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关…

为什么Go是后端开发的未来

近年来&#xff0c;Go 编程语言的流行度迅速增加。Go 最初由 Google 开发&#xff0c;迅速成为后端开发中最受欢迎的语言之一&#xff0c;特别是在分布式系统和微服务的开发中。本文将讨论为什么 Go 是后端开发的未来。 Go 简介 Go&#xff0c;又称为 Golang&#xff0c;是由…

【图数据库实战】HugeGraph架构

一、概述 作为一款通用的图数据库产品&#xff0c;HugeGraph需具备图数据的基本功能&#xff0c;如下图所示。HugeGraph包括三个层次的功能&#xff0c;分别是存储层、计算层和用户接口层。 HugeGraph支持OLTP和OLAP两种图计算类型&#xff0c;其中OLTP实现了Apache TinkerPop3…

如何从Android手机恢复已删除的联系人

联系人应该是最重要的信息之一。 如果您不小心从Android手机中删除了联系人&#xff0c;该怎么办&#xff1f; 如果不容易找回丢失的联系人&#xff0c;您可以使用奇客数据恢复安卓版。 从Android的手机中恢复已删除的联系人 只需删除Android联系人&#xff0c;然后您就可以通…

【Java 进阶篇】揭秘 JQuery 广告显示与隐藏:打造令人惊艳的用户体验

在当今互联网时代&#xff0c;广告已经成为网页中不可忽视的一部分。然而&#xff0c;如何通过巧妙的交互设计&#xff0c;使广告既能吸引用户的眼球&#xff0c;又不会给用户带来干扰&#xff0c;成为了许多前端开发者需要思考的问题之一。在这篇博客中&#xff0c;我们将深入…

Pytorch1.7复现PointNet++点云分割(含Open3D可视化)(文末有一个自己做的书缝识别项目代码)

毕设需要&#xff0c;复现一下PointNet的对象分类、零件分割和场景分割&#xff0c;找点灵感和思路&#xff0c;做个踩坑记录。 下载代码 https://github.com/yanx27/Pointnet_Pointnet2_pytorch   我的运行环境是pytorch1.7cuda11.0。 训练 PointNet代码能实现3D对象分类、…

centos7中安装Nginx和使用Nginx详细操作

环境&#xff1a; 准备了三台centos7虚拟机:192.168.213.4、192.168.213.5、192.168.213.6。 一、安装 三台虚拟机都安装下面的步骤执行&#xff0c;安装Nginx&#xff0c;为后面的使用演示使用。 1、安装必备组件: sudo yum install yum-utils2、配置yum源 在下面的文件目录…

详解自动化测试之 Selenium

目录 1. 什么是自动化 2.自动化测试的分类 3. selenium&#xff08;web 自动化测试工具&#xff09; 1&#xff09;选择 selenium 的原因 2&#xff09;环境部署 3&#xff09;什么是驱动&#xff1f; 4. 一个简单的自动化例子 5.selenium 常用方法 5.1 查找页面元素&…

如何合理估算 Java 线程池大小

前 言 Java 中的线程创建会产生显著的成本。创建线程会消耗时间&#xff0c;增加请求处理的延迟&#xff0c;并且涉及 JVM 和操作系统的大量工作。为了减轻这些开销&#xff0c;线程池发挥了作用。 在本文中&#xff0c;我们将深入研究确定理想线程池大小的艺术。经过微调的线…

【C++】模版-初阶

目录 泛型编程--模版 函数模版 类模版 泛型编程--模版 函数模版 如何实现一个通用的交换函数呢?void Swap(int& left, int& right){int temp left;left right;right temp;}void Swap(double& left, double& right){double temp left;left right;righ…

基于ssm+vue交通事故档案系统

摘要 摘要是对文章、论文或其他文本的主要观点、结论和关键信息的简洁概括。由于你没有提供具体的文章或主题&#xff0c;我将为你创建一个通用的摘要。 本文介绍了一种基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;和Vue.js的交通事故档案管理系统的设计与实现…

设计模式-备忘录模式-笔记

动机&#xff08;Motivation&#xff09; 在软件构建过程中&#xff0c;某些对象的状态在转换过程中&#xff0c;可能由于某种需要&#xff0c;要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态&#xff0c;便会暴露对象的细节…