R中使用heatmap.2绘制相关热图报错图形状态异常、pin参数无效
heatmap.2新增变量后报图形状态/par参数错误排查
报错核心原因
两个报错都是绘图布局计算失败触发的,根源在代码里的三个问题,之前变量少的时候容错机制没触发报错,新增变量后行列数变化直接触发布局计算崩溃:
- 标签向量构造错误:写代码时手动换行把
Sports Involvement、Epilepsy Status两个字符串从中间拆断,既导致命名索引和数据框实际列名匹配失败,也让labvec最终长度和热图输入矩阵的行数量不匹配,标签映射错位。 - 图形参数传参错误:
par(cex.main=0.8)是全局参数设置语句,不能作为无名参数直接塞进heatmap.2()的参数列表,函数会把该语句的返回值识别为无效绘图参数,参与布局计算时引发冲突。 - 绘图边距/设备尺寸不足:新增变量后长标签需要更大的边距空间,原有
margins = c(15,15)配合默认尺寸的绘图设备,会计算出无效的pin(绘图区域尺寸)参数,直接抛出参数错误。
修复代码
library(gplots) library(RColorBrewer) # 全局参数提前在函数外设置 par(cex.main=0.8) # 构造标签向量时不要在字符串中间换行,保证标签数量和矩阵行数完全对应 labvec <- c( "ACE Score", "Bully-Victim", "Family Resilience", "TBI", "Child's Sex", "Child's Age", "Child's Race", "Caregiver Education", "Sports Involvement", "Epilepsy Status", "Percent FPL" ) # 若RStudio默认绘图面板尺寸过小,主动开足够大的绘图设备避免边距计算错误 # Windows系统解除下一行注释 # windows(width = 10, height = 10) # Mac系统解除下一行注释 # quartz(width = 10, height = 10) heatmap.2( acenation[,-1], cellnote = acenation[,-1], notecol = "black", key.xlab = "r value", trace = "none", dendrogram = "column", density.info = "none", cexCol = 1.3, cexRow = 1.3, Rowv = NA, margins = c(16, 16), # 适当增大边距适配长标签 labRow = labvec, main = "Correlation Matrix Between ACE Score, TBI and Covariates", scale = "none", col = brewer.pal(8, "Greens") )
补充说明
如果运行时仍报pin参数错误,直接手动把RStudio的Plots面板拉到足够大,再重新运行代码即可。
内容的提问来源于stack exchange,提问作者Shaiza Bushra
相关产品推荐
相关产品推荐

