ggplot多变量热图绘制:pivot_longer数据转换报错求助
解决pivot_longer类型冲突报错及蛋白表达热图绘制方案
错误原因
pivot_longer报错「无法合并CellLine cols=3:45按位置指定转换范围,容易因列数变化或列位置误判,把细胞系列包含进转换范围。
解决方案
1. 修正宽转长代码(核心)
放弃按位置索引列,改用排除细胞系列的方式精准指定转换范围,避免类型冲突:
library(tidyr) library(dplyr) # 宽格式转长格式,排除CellLines列(实际数据中的细胞系列名) CtrlsMatrixed <- ControlsDF %>% pivot_longer( cols = -CellLines, # 排除细胞系列,转换所有蛋白列 names_to = "GeneSignature", values_to = "ExpressionValue", # 明确值列名称 values_ptypes = list(ExpressionValue = double()) # 强制值列为数值型,彻底避免类型问题 )
2. ggplot绘制热图代码
基于转换后的长格式数据,绘制符合需求的热图:
library(ggplot2) ggplot(CtrlsMatrixed, aes(x = GeneSignature, y = CellLines, fill = ExpressionValue)) + geom_tile(color = "white") + # 瓦片添加白色边框,增强区分度 scale_fill_gradient(low = "#f7fbff", high = "#08306b") + # 蓝白渐变配色,可自行调整 theme_minimal() + theme( axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1), # x轴蛋白名旋转90度,避免重叠 panel.grid = element_blank(), # 移除网格线,突出热图 axis.title = element_text(size = 12, face = "bold") ) + labs( x = "蛋白标志物", y = "细胞系", fill = "表达值" )
关键说明
- 用
cols = -CellLines替代位置索引,无论数据列数如何变化,都能精准排除细胞系列,从根源解决类型冲突 values_ptypes参数强制值列为数值型,确保后续颜色映射逻辑正常- 热图的颜色渐变、主题样式可根据需求自行调整,比如替换
scale_fill_gradient为scale_fill_viridis_c()使用更友好的配色
内容的提问来源于stack exchange,提问作者Jeremy bravo
相关产品推荐
相关产品推荐

