8. 分组热图

 我们在画热图的时候,很大程度上是为了比较不同组之间是否存在基因表达的差异或者物种丰度的差异。那么分组热图可能是你的最好选择,也就是从图1到图2的过程。

                图1 正常聚类热图 (左)                                                              图2分组聚类热图 

怎么绘制呢,很简单,我们先准备一下两个文件, rrr_matrix.xlsx(不同样本基因表达量表)和group.xlsx(样本分组表)

 不同样本的基因表达量的表 rrr_matrix.xlsx

分组表group.xlsx 

下面就是直接上R代码了

library(readxl)
Group <- as.data.frame(read_excel("group.xlsx"))
rownames(Group) <- Group[[1]]
Group <- Group[-1]

rrr <- as.data.frame(read_excel("rrr_matrix.xlsx"))
rownames(rrr) <- rrr[[1]]
rrr <- rrr[-1]


#BiocManager::install("ComplexHeatmap")
library(ComplexHeatmap)
library(circlize)


col_fun = colorRamp2(c(-2, 0, 2), c("#2fa1dd", "white", "#f87669"))
top_annotation = HeatmapAnnotation(
  cluster = anno_block(gp = gpar(fill = c("#2fa1dd", "#f87669")),
                       labels = c("control","treat"),
                       labels_gp = gpar(col = "white", fontsize = 12)))

# 重新排序Group,基于因子水平的顺序
Group <- Group[order(factor(Group[,1], levels = c("treat", "control"))),]

# 现在Group的顺序应该是先treat后control
# 使用更新后的Group进行绘图
m = Heatmap(as.matrix(rrr), name = " ",
            col = col_fun,
            top_annotation = top_annotation,
            column_split = Group,
            show_heatmap_legend =  FALSE,
            border = FALSE,
            show_column_names = FALSE,
            show_row_names = FALSE,
            column_title = NULL)
m

解决战斗!

 

关注我,以后的内容更精彩哦。
另外如有错误欢迎指正!
b站号:羽球最强生信

微信公众号:小秋的R语言笔记

闲鱼号/淘宝号:小秋家的小卖铺

### 绘制分组环形的方法 #### 使用 Python 的 Matplotlib 和 Circlize 库绘制分组环形 以下是基于 Python 实现分组环形的一个示例代码: ```python import numpy as np import pandas as pd from circlify import circlify, Circle import matplotlib.pyplot as plt # 创建数据集 data = [ {'id': 'Group A', 'datum': 18, 'group': 'A'}, {'id': 'Subgroup A1', 'datum': 12, 'group': 'A'}, {'id': 'Subgroup A2', 'datum': 6, 'group': 'A'}, {'id': 'Group B', 'datum': 15, 'group': 'B'}, {'id': 'Subgroup B1', 'datum': 5, 'group': 'B'}, {'id': 'Subgroup B2', 'datum': 5, 'group': 'B'}, {'id': 'Subgroup B3', 'datum': 5, 'group': 'B'} ] circles = circlify(data) # 设置画布大小 fig, ax = plt.subplots(figsize=(8, 8)) ax.set_xlim(-1.2, 1.2) ax.set_ylim(-1.2, 1.2) # 隐藏坐标轴 ax.axis('off') # 定义颜色映射 colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99'] for circle in circles: if circle.level == 0: # 主组 color = colors[0] elif circle.level == 1: # 子组 color = colors[circle.ex['group'] != 'A' and 1 or 0] else: continue x, y, r = circle.x, circle.y, circle.r ax.add_patch(plt.Circle((x, y), r, color=color, alpha=0.7)) # 添加标签 for circle in circles: if circle.level > 1: x, y, r = circle.x, circle.y, circle.r label = circle.ex['id'] plt.text(x, y, label, ha='center', va='center', fontsize=10) plt.title("分组环形", fontsize=16) plt.show() ``` 此代码利用 `circlify` 库来计算圆圈的位置和半径,并通过 Matplotlib 进行可视化[^1]。 --- #### R 中使用 `circlize` 包绘制分组环形 下面是基于 R 的实现方式,主要依赖于 `circlize` 包完成分组环形的绘制: ```r library(circlize) library(RColorBrewer) # 数据准备 mat <- matrix(runif(100), nrow = 10) rownames(mat) <- paste0("Gene_", letters[1:10]) colnames(mat) <- paste0("Sample_", 1:10) # 调整矩阵布局 split <- rep(c("Group_A", "Group_B"), each = 5) ht_opt$set(show_column_names = FALSE) # 绘制环形 heatmap(mat, split = split, col = brewer.pal(9, "Blues")) legend("topright", legend = c("Group_A", "Group_B"), fill = c("#FFEDA0", "#FED976")) grid.draw(lgd) # 手动添加例 ``` 上述代码展示了如何通过 `circlize` 包中的 `heatmap()` 函数生成带有分组信息的环形,并手动调用 `legend()` 或 `grid.draw()` 来补充例部分。 --- #### 关键点解析 - **Matplotlib 圆形嵌套结构**:在 Python 中可以通过多次叠加透明度不同的圆形区域模拟分组效果[^2]。 - **Circlize 表特性**:相比传统矩形,环形设计能够更加紧凑地展示多维数据关系[^3]。 - **参数优化建议**:当处理多个子群时,适当调节缺口角度以增强可读性和美观性[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值