You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cooccur包绘制热图时物种名称标签重叠如何解决?

cooccur包绘制共现热图物种标签重叠解决方案

cooccur包默认plot()方法基于R基础绘图系统实现,标签重叠通常是边距不足、标签字号过大、物种名过长导致,可通过以下三种方式解决:

方案1:调整基础绘图边距与标签字号

直接在绘图前通过par()设置全局绘图参数,给标签预留足够显示空间,同时缩小标签字号,无需修改原始数据或绘图逻辑:

# mar参数四个值依次对应下、左、上、右四个方向的边距宽度,可根据物种名长度自行调整数值
# cex.axis控制坐标轴物种标签的缩放比例,数值越小字号越小
par(mar = c(9, 9, 2, 2), cex.axis = 0.65)

# 运行原有的cooccur计算与绘图代码
M <- cooccur(mat = M, type = "spp_site", thresh = T, spp_names = TRUE, prob = "hyper")
plot(M, plotrand = TRUE)

如果使用RStudio,可先手动拉大右下角绘图面板的尺寸,再运行绘图代码,显示空间越充足,标签重叠概率越低。

方案2:提取共现结果自定义热图,支持标签旋转

如果物种名偏长,单纯缩放字号会导致文字难以辨认,可以提取cooccur的计算结果,用支持标签旋转的热图函数重新绘图,自由度更高:

library(gplots)
# 提取共现分析结果,构建对称共现矩阵
sp_all <- unique(c(M$results$sp1, M$results$sp2))
cooc_sym_matrix <- matrix(
  data = NA, 
  nrow = length(sp_all), 
  ncol = length(sp_all),
  dimnames = list(sp_all, sp_all)
)
for (row in 1:nrow(M$results)) {
  sp1 <- M$results[row, "sp1"]
  sp2 <- M$results[row, "sp2"]
  p_val <- M$results[row, "p_gt"]
  cooc_sym_matrix[sp1, sp2] <- p_val
  cooc_sym_matrix[sp2, sp1] <- p_val
}

# 绘制带旋转标签的热图
heatmap.2(
  x = cooc_sym_matrix,
  trace = "none", # 去掉默认的轨迹线
  dendrogram = "none", # 不需要聚类树可保留这行,需要可删除
  cexRow = 0.7, # 行标签字号
  cexCol = 0.7, # 列标签字号
  srtRow = 30, # 行标签旋转角度
  srtCol = 45, # 列标签旋转角度
  margins = c(8, 8) # 边距设置
)

如果习惯用ggplot2绘图,也可以把矩阵转成长表后用geom_tile()实现热图,标签调整的灵活度更高。

方案3:简化过长的物种名称

如果原始物种名是带全分类信息、菌株号的长文本,可提前简化名称后再输入cooccur计算,从源头降低标签占位长度:

# 示例:原始输入为物种-位点矩阵时,简化行名(物种名)
# 原始名格式比如为"Staphylococcus_aureus_subsp_aureus_N315",可简化为"S. aureus N315"
original_spp_names <- rownames(your_input_spp_site_matrix)
short_spp_names <- gsub("([A-Z])[a-z]+_([a-z]+)_.*", "\\1. \\2", original_spp_names)
rownames(your_input_spp_site_matrix) <- short_spp_names

# 替换原代码中的输入矩阵为修改过行名的矩阵,重新运行cooccur计算和绘图即可

内容的提问来源于stack exchange,提问作者Subrata Gayen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:48:18