使用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”:横坐标名

参考资料:

comments powered by Disqus