SC| 差异基因统计+双向条形图

359 阅读1分钟

数据准备——主要是找到目标细胞群的差异基因,分别为up和down

T_cells$celltype.group <- paste(T_cells$celltype2, T_cells$orig.ident, sep = "_")
Idents(T_cells) <- "celltype.group"
T_cells.markers <- FindMarkers(T_cells,ident.1 = "T_cells_EAM",ident.2 = "T_cells_Control", verbose = TRUE, test.use = 'wilcox',min.pct = 0.1)

mydeg_1 <- FindMarkers(T_cells,ident.1 = 'T_cells_EAM+HCQ',ident.2 ='T_cells_EAM', verbose = TRUE, test.use = 'wilcox',min.pct = 0.1)


#上调的基因
T_cells.markers <- subset(T_cells.markers, p_val_adj<0.05&abs(avg_log2FC)>0.15)
sig_dge.up_T_cells_EAM <- subset(T_cells.markers, p_val_adj<0.05&avg_log2FC>0.15)
sig_dge.down_T_cells_EAM <- subset(T_cells.markers, p_val_adj<0.05&avg_log2FC< -0.15)


mydeg_1 <- subset(mydeg_1, p_val_adj<0.05&abs(avg_log2FC)>0.15)#按p校正值<0.05且|abs(log2FC)|>0.15取差异基因?
sig_dge.up_T_cells_EH <- subset(mydeg_1, p_val_adj<0.05&avg_log2FC>0.15)#EAM上调的基因
sig_dge.down_T_cells_EH <- subset(mydeg_1, p_val_adj<0.05&avg_log2FC< -0.15)

bb <- rownames(sig_dge.down_T_cells_EH)
cc <- rownames(sig_dge.up_T_cells_EAM)
aa <- intersect(bb,cc)
dd <- rownames(sig_dge.down_T_cells_EAM)
ee <- rownames(sig_dge.up_T_cells_EH)
ff <- intersect(dd,ee)
write.csv(aa,'T_cells_down.csv')
write.csv(ff,'T_cells_up.csv')

image.png

实操

# 加载R包,没有安装请先安装  install.packages("包名") 
library(ggplot2)
library(reshape2)

# 读取双向柱形图数据文件
diff= read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/model/ggplot2/DoublePositionBarPlot/demo.txt")   # 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件


# 把数据转换成ggplot常用的类型(长数据)
diff = melt(diff)                    # melt出自reshape2包
head(diff)                         # 查看转换完成的数据的前几行
#   X         variable   value
# 1 Pathway1       Up    35
# 2 Pathway2       Up    27
# 3 Pathway3       Up    58
# 4 Pathway4       Up    24
# 5 Pathway5       Up     4
# 6 Pathway6       Up    58

# 绘图
ggplot(diff, aes(
  x = factor(X,levels = unique(X)),             # 将第一列转化为因子,目的是显示顺序与文件顺序相同,否则按照字母顺序排序
  y = ifelse(variable == "Up", value, -value),  # 判断分组情况,将两个柱子画在0的两侧
  fill = variable)) +
  geom_bar(stat = 'identity')+                                # 画柱形图
  coord_flip()+                                               # x轴与y轴互换位置
  geom_text(                                                  # 在图形上加上数字标签
    aes(label=value,                                          # 标签的值(数据框的第三列)
        # vjust = ifelse(variable == "Up", -0.5, 1),          # 垂直位置。如果没有coord_flip(),则可以取消这行注释
        hjust = ifelse(variable == "Up", -0.4, 1.1)           # 水平位置
    ),
    size=3                                                    # 标签大小
    
  )+
  scale_y_continuous(                                         # 调整y轴
    labels = abs,                                             # 刻度设置为绝对值
    expand = expansion(mult = c(0.1, 0.1)))+# 在y轴的两侧,留下一部分的空白位置,防止加标签的时候,显示不全
scale_fill_manual(values = c("#E64B35FF", "#3C5488FF"))