如何在R语言热图中显示所有轴标签(含全部年份)?
解决R语言heatmap.2热图Y轴年份标签缺失的问题
核心原因
默认情况下heatmap.2()会对行进行聚类排序,同时自动隐藏部分标签防止重叠,导致年份标签显示不全。要显示全部年份,需从关闭聚类和调整标签显示参数两方面入手。
方法1:关闭聚类+调整标签角度
通过关闭行聚类保持年份顺序,同时设置标签旋转角度和字体大小,确保所有标签显示:
year = seq(from=1971,to=2020,by=1) jan = runif(n = 50, min = -3, max = 3) feb = runif(n = 50, min = -3, max = 3) mar = runif(n = 50, min = -3, max = 3) apr = runif(n = 50, min = -3, max = 3) may = runif(n = 50, min = -3, max = 3) jun= runif(n = 50, min = -3, max = 3) jul= runif(n = 50, min = -3, max = 3) aug= runif(n = 50, min = -3, max = 3) sep= runif(n = 50, min = -3, max = 3) oct= runif(n = 50, min = -3, max = 3) nov= runif(n = 50, min = -3, max = 3) dec= runif(n = 50, min = -3, max = 3) df = data.frame(year,jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec) rownames(df) <- df$year df=df[,-1] df=as.matrix(df) my_palette <- colorRampPalette(c("red", "white", "blue"))(n = 9) # 修改后的heatmap.2调用 heatmap.2(df, scale = "none", col = my_palette, trace = "none", density.info = "none", main = "Bohicon", Rowv = NA, # 关闭行聚类,保持原始年份顺序 cexRow = 0.7, # 缩小标签字体,避免重叠 srtRow = 45, # 将标签旋转45度 adjRow = c(1, 0.5) # 配合旋转角度调整标签对齐方式 )
参数说明:
Rowv = NA:取消行聚类,确保年份按1971-2020的原始顺序排列,这是显示全部年份的基础cexRow:控制行标签字体大小,可根据图的大小调整(比如0.6-0.8)srtRow:标签旋转角度,常用45度或90度,90度时可将adjRow设为c(0.5,1)
方法2:错位排列标签(避免重叠)
如果不想旋转标签,可通过自定义行标签的缩进实现错位排列,让奇数行和偶数行标签错开:
# 自定义错位标签 row_labels <- ifelse(as.integer(rownames(df)) %% 2 == 0, paste0(" ", rownames(df)), # 偶数行加空格缩进 rownames(df)) heatmap.2(df, scale = "none", col = my_palette, trace = "none", density.info = "none", main = "Bohicon", Rowv = NA, cexRow = 0.7, RowLabels = row_labels # 使用自定义错位标签 )
这种方式通过给偶数行标签添加前置空格,让上下标签错开,减少横向重叠,同时保持标签水平显示。
补充说明
如果需要保留行聚类但仍显示全部标签,只需移除Rowv = NA,同时调整cexRow和srtRow参数即可,但聚类后行顺序会打乱,年份不再按顺序排列。
内容的提问来源于stack exchange,提问作者Marcel
相关产品推荐
相关产品推荐

