图表可以从分布、联系、比较、构成4个方面对图表进行分类和选择。
1、展示样本分布与关联
PCA
https://mp.weixin.qq.com/s/KmRdIBEFH6Tw-Gm7CMXZ_Q
相关性热图
甜甜圈图
// R
#https://mp.weixin.qq.com/s/-c4nP0xeCisOkUv_Oe4ijQ
2、展示差异基因分布
火山图
MA plot
MA-plot,即M-versus-A plot,也称为 Bland-Altman plot,主要应用在数据分布情况的可视化,比如突出显示差异表达基因和/或其他基因类别,例如管家基因、高可变基因。该图将数据转换为M(对数比)和A(平均值),然后绘制这些值来可视化两个样本中测量值之间的差异。M常对应差异表达分析获得的差异对比组之间基因表达变化log2FC。A对应实验组与对照组的平均标化表达量(mean normalized count),可以利用差异对比组的CPM、TPM、FPKM进行计算。当一个点的X轴数值很大,Y轴绝对值也很大的时候,就说明它是平均表达量高,组间差别还很大的基因。由于大部分Y轴绝对值大的点其实会集中在X轴数值居中的部位,所以大部分MA plot是沿X轴流线型或三角形的。
此外,MA plot可以直观展示数据测序质量。比如,如果大部分点的X轴数值都接近于0,说明基因表达量普遍偏低,可能测序深度不够,或者文库质量不好。另一方面,在RNA-seq数据的分析中,不仅需要进行标准化,还需要通过算法对数据进行降噪校正,去掉干扰信号。校正后的数据,其组间差异总体上应该较为平均地分布在Y=0两侧,也就是说,所有的点整体上看起来水平悬浮。但是,如果结果显示出这些点整体跑偏,中线严重偏离了Y=0,甚至形成了弧形,则说明校正方法可能不太适宜。
// R
#https://mp.weixin.qq.com/s/jScnUOAMZ6zopFQihyiG_Q
#在DESeq2差异分析基础上
df <- DEG_DESeq2
#阈值确定:
pvalue = 0.05
log2FC = 1
#添加上下调分组标签:
df$group <- case_when(
df$log2FoldChange > log2FC & df$pvalue < pvalue ~ 'up',
df$log2FoldChange < -log2FC & df$pvalue < pvalue ~ 'down',
TRUE ~ 'none'
)
table(df$group)
#转换为因子,指定绘图顺序;
df$group <- factor(df$group, levels = c('up','none','down'))
#在excel中利用FPKM矩阵计算标化值(FPKM)的平均表达量:
#读入
FPKM <- read.csv("./result/1.3.gene_expression/FPKM.csv",header = T,row.names = 1,check.names=F)
#在df中新建两列,将行名对应的FPKM的矩阵中的mean的值添加:
df$mean_FPKM <- FPKM[rownames(df),]$mean
#也可以是用deseq2标准化的值计算平均值:
#提取标化后的dds矩阵
normalized_counts <- as.data.frame(counts(dds_2, normalized=TRUE))
#计算平均值
normalized_counts$mean <- rowMeans(normalized_counts)
#将平均值添加到df中:
df$mean_dds <- normalized_counts[rownames(df),]$mean
### MA Plot ####
library(ggplot2)
library(ggrepel)
library(dplyr)
library(patchwork)
#新建横纵坐标列:
df$A <- df$mean_dds
#或
df$A <- df$mean_FPKM
df$M <- df$log2FoldChange
#ggplot2绘图:
#自定义颜色:
mycol <- c("#EB4232","grey90","#2DB2EB")
#自定义主题:
mytheme <- theme_classic() +
theme(plot.title = element_text(size = 17),
axis.title = element_text(size = 15),
axis.text = element_text(size = 14),
legend.text = element_text(size = 14),
plot.margin = margin(15,5.5,5.5,5.5))
#MA图绘制:
##注意图层叠加顺序
p1 <- ggplot() +
geom_point(data = df[df$group=='none',],
aes(x = A, y = M, color = group)) +
geom_point(data = df[df$group=='up',],
aes(x = A, y = M, color = group)) +
geom_point(data = df[df$group=='down',],
aes(x = A, y = M, color = group)) +
scale_colour_manual(name = '', values = rev(alpha(mycol, 0.7))) +
scale_x_continuous(trans = 'log10', name = 'Mean normalized count') + # 将横坐标转换为log10并修改名称
scale_y_continuous(name = "Log2(Fold Change)") + # 修改纵坐标名称
geom_hline(yintercept = 0, size = 0.5, color = "black", lty = 'dashed') +
labs(title = 'MA_Plot') +
mytheme+
theme(
axis.text = element_text(color = 'black'), # 修改坐标轴刻度字体颜色为黑色
axis.title = element_text(color = 'black') # 修改坐标轴标题字体颜色为黑色
)+
geom_text_repel(
data = df[rownames(df) %in% c('HPD','SERPING1', 'GAPDH'), ],
aes(x = A, y = M, label = rownames(df)[rownames(df) %in% c('HPD','SERPING1', 'GAPDH')]),
color = 'red',
size = 4,
fontface = 'bold',
segment.color = 'black', # 连线颜色
segment.size = 0.5, # 连线粗细
force = 0.5, # 强制推开标签
nudge_y = 0.5 # 向上微调标签,确保连线清晰可见
)
p1
瀑布图(Waterfall plot / Rank plot)
// R
#https://mp.weixin.qq.com/s/FPGeRtuPxEFU7XZNYJ1okA
# 数据准备:需要基因名、logFC、分组组名、rank值,前两者与GSEA所需数据一样
#从差异基因列表导入基因(deseq2)
data <- DEG_DESeq2
data$gene_name <- rownames(data)
data$logFC <- data$log2FoldChange
data <- data[,-c(1:6)]
data <- arrange(data,desc(logFC)) #按照LogFC降序排列
#降序和升序决定了waterfall plot的方向
#指定分组
#data$group <- ifelse(data$logFC > 0,'Up','Down')
selected <- data[1:10,] #例如,选择前10个基因
#指定分组以及添加label
data %>%
mutate(group = case_when(
gene_name %in% selected$gene_name~'selected',
T~'other'
),
label = case_when(
gene_name == 'HPD'~gene_name,
T~''
))->data
#添加rank列
data$rank = 1:nrow(data)
#绘制waterfall plot
#数据分隔
data_selected <- data %>% filter(group == "selected")
data_other <- data %>% filter(group != "selected")
# 主题设置
plot.format <- theme(
plot.background = element_blank(),
panel.grid = element_blank(),
panel.background = element_blank(),
panel.border = element_blank(),
axis.line.x.top = element_blank(),
axis.line.y.right = element_blank(),
axis.line = element_line(color = "black"),
axis.ticks = element_line(color = "black", linewidth = 0.5),
axis.text = element_text(color = "black", size = 14),
axis.title = element_text(color = "black", size = 14),
plot.title = element_text(color = "black", size = 14),
legend.background = element_blank(),
legend.key = element_blank(),
legend.text = element_text(color = "black", size = 14),
legend.title = element_text(color = "black", size = 14)
)
# 画图
p = ggplot() +
geom_hline(yintercept = 0, lty = 4, col = 'black', lwd = 0.2) +#加上0的虚线
geom_point(data = data_other,
aes(x = rank, y = logFC, fill = group, color = group),
size = 2, shape = 21, alpha = 0.75) +#先画other
geom_point(data = data_selected,
aes(x = rank, y = logFC, fill = group, color = group),
size = 2, shape = 21, alpha = 0.75) +#再画selected
geom_text_repel(data = data, aes(x = rank, y = logFC, label = label), size = 4,
box.padding = unit(0.2, 'lines'),
point.padding = unit(0.3, 'lines'),
show.legend = FALSE,
max.overlaps = Inf) +#加上标签
scale_fill_manual(values = c('#7D7B82','#5872D0' )) +#自定义颜色
scale_color_manual(values = c('#7D7B82','#5872D0' )) +#自定义颜色
labs(x = 'Rank', y = 'log2Foldchange(XX/Normal)') +#坐标轴的标签
guides(fill = guide_legend(title = NULL), color = guide_legend(title = NULL)) +
plot.format#自定义主题
p
#加上p value,见下文
#https://mp.weixin.qq.com/s/lwr1QwqM0KpL0WwfNVd6ug
散点图
// R
#https://mp.weixin.qq.com/s/1g26mRRNBTUHFb75lWRMOw
3、展示单个或多个基因表达变化
热图(标记基因+行列注释)
// R
#https://mp.weixin.qq.com/s/R6N6rkAqUsIv79w6Lnt8PQ
配对样本热图
箱线图/配对连线图
dumbbell chart
https://mp.weixin.qq.com/s/ps_3DhoCEtBOZyT6vGH8Ww
分组雷达图
雷达图(Radar Chart),又称蛛网图或蜘蛛图,是一种图形化工具,用于显示多变量数据的对比。每个变量以等角度放射线(从中心向外延伸)表示,数据点在各变量轴上的位置表示各自的数值,最终形成一个闭合的多边形。其定义和特点如下:
1. 变量展示
各变量沿圆周均匀分布,通常从中心向外延伸,每个放射线代表一个维度或指标。放射线的数量和多边形的边数相同,数量取决于变量的多少。
2. 数值表示
每个数据点在其相应变量轴上的位置代表其数值大小,距离中心越远通常表示该变量的值越大(根据具体情况可调)。
3. 多维数据比较
雷达图适合用于比较不同组别的数据在多维度上的表现,例如同类产品在不同指标上的性能对比。通过将多个多边形重叠,可以直观展示不同组别在各维度上的差异。
4. 易于识别优势和劣势
图形中各边的长短及形状变化直观地展示了数据的强弱特点。图形的对称性和各变量轴上的延伸程度可以帮助快速识别数据的优势和劣势区域。
// R
#https://mp.weixin.qq.com/s/yWCMwkoPuOtDR5GP3DwI6Q
4、展示交集基因
韦恩图
// R
#https://mp.weixin.qq.com/s/sXg25aznznw8a787HRbrWg
成比例韦恩图
// R
#https://mp.weixin.qq.com/s/W2EGbgvyIyvVxQiVX8vg4A
花瓣图
// R
#https://mp.weixin.qq.com/s/1somdu9AXI_YXk56UC3Luw
散点图(多组学或多对样本)
热图
// R
#https://mp.weixin.qq.com/s/mO4BL_TEkXDgnK5WiibPPA
5、ORA通路富集可视化
柱状图/条形图
// R
#https://mp.weixin.qq.com/s/DEh7a2n9Va8GKg0kKCo6QA
// R
#https://mp.weixin.qq.com/s/T06XncgWiFTa4eUkOPGwIQ
// R
#https://mp.weixin.qq.com/s/67fdMYTAWx578dcSeMCeAA
流星图/彗星图
// R
#https://mp.weixin.qq.com/s/8A6NV2M56FF3y2mLMAA3Gw
#https://mp.weixin.qq.com/s/XVSOR0Gr43TrCylYrdo5PQ
气泡图/多组气泡图
// R
#https://mp.weixin.qq.com/s/P-4mZXwfMBrAzR-a0utALA
// R
#https://mp.weixin.qq.com/s/MDGhpZKvrj9shfS6XtvX9Q
双向柱状图
// R
#https://mp.weixin.qq.com/s/QYot9vnV29TOtxapWKYjNw
棒棒糖图/火柴杆图
// R
#https://mp.weixin.qq.com/s/PbxpiukunqnZWdKrpMkNkg
// R
#https://mp.weixin.qq.com/s/RfpBX-VPPWAI_CrEptQFpg
// R
#https://mp.weixin.qq.com/s/GMPkm9TMbvv-BL_aMhJw9g
和弦图
// R
#https://mp.weixin.qq.com/s/YZBqackQAqfKpUmoakiQ4w
#https://mp.weixin.qq.com/s/kW7Q_BmcUILD5_18bItYLQ
富集环图
// R
#https://mp.weixin.qq.com/s/QnO0-ZoQGI69h4aIvSb27w
聚类热图+词云图
// R
#https://mp.weixin.qq.com/s/BmROSJCTEzHRj9yiM8rcmA
6、GSEA通路富集可视化
GSEA图
柱状图
分组柱状图
气泡图
雷达图
用于展示不同分组/亚群的不同得分
热图
7、免疫浸润
1、箱线图
使用MCP counter计算TCGA样本的免疫浸润分数,并进行统计检验。