使用R绘制类内组间比较热图
使用R绘制类内组间比较热图,这里所使用的R包plotool我目前还没上传。
模仿"Pan-cancer whole-genome comparison of primary and metastatic solid tumours"这篇文章的figure1d绘制热图。

该图是:比较多种癌症类型内,原发瘤和转移瘤之间的染色体臂的倍性(经过标准化),矫正后p值小于0.01的标记为显著*
。
写了一个自用的R包plotool
,里面的函数如下:

示例数据
构建示例数据,根据示例数据绘制示例图。
# 设置种子以便复现结果
set.seed(123)
samples <- paste0("Sample", 1:200)
# 生成列名为 feature1 到 feature10 的多个特征列
num_features <- 20
feature_data <- matrix(rnorm(length(samples) * num_features), ncol = num_features)
colnames(feature_data) <- paste0("feature", 1:num_features)
# 创建数据框
data <- data.frame(
sample = paste0("Sample", 1:200), # 生成样本名称
type = sample(c(paste0("class",LETTERS[1:10])), 200, replace = TRUE), # 生成type数据
pair = sample(c("primary", "metastasis"), 200, replace = TRUE), # 生成pair数据
feature_data
)
types <- unique(data$type)
# get table
pair.df <- plotool::get_pair_table(
data = data,
type = types,
feature = colnames(feature_data),
q_val_cutoff = 0.5,
cal_fun = "mean"
) %>%
dplyr::mutate(
feature = factor(
x = feature,
levels = paste0("feature", 1:num_features)
)
)
q_val_cutoff这里为了方便展示,把矫正后的p值q_val_cutoff参数设为了0.5。
绘图:上面是primary,下面是metastatic。
# plot
out <- plotool::pair_feature_heatmap(
df = pair.df,
feature = colnames(feature_data),
title = "Type average-normalized feature value",
title.position = "top",
xlab = "Features"
)
out

get_pair_table
获得显著性标记,计算每组每个特征在热图中展示的数值,生成用于绘图的数据,
-
data:必须包含:sample,type,pair(比如原发和转移,反应和不反应等分组标签)和各种feature数值的宽数据,列名要对应上
-
type:类别名,字符串,比如这里的class
-
featurea:特征名,字符串,比如这里的feature123
-
q_val_cutoff = NULL:当q值没有设置时,使用p值的cutoff作为筛选的条件来标注显著性
-
pvalue_cutoff = 0.05:默认p值的cutoff来标注显著性,小于该值标记显著
-
cal_fun = c(“mean”, “median”, “sum”):计算展示数据的方式,分别对应:均值,中位数,总和
pair_feature_heatmap
用于绘制热图。
-
df:get_pair_table的输出作为该函数的输入
-
feature:特征名字符串
-
tile_colors = c(’#000080’,’#009ACD’,’#B2DFEE’,’#FFFFFF’,’#FF758C’,’#FF007F’,’#A8152E’):颜色设置
-
breaks = c(seq(-1, -0.1, by = 0.1), seq(0.1, 1, by = 0.1)):对应颜色的数值范围划分
-
title = “Title”:图注的标题
-
title.position = “top”:图注的位置
-
xlab = “feature”:横坐标名