
錯誤信息
最近處理10x數(shù)據(jù),需要把已有的亞群合并,然后繪制目標(biāo)基因的熱圖~
樸實~ 無華~ 枯燥~
處理完成之后,需要調(diào)整亞群繪制順序,基因的順序
OK~ 我改~
one moment later......
“怎么這幾張圖的標(biāo)度范圍不一樣?看起來不統(tǒng)一”
我改~ 也就是一個修改刻度~
然后~ 然后我就后悔了~
漫漫Debug路
第一次嘗試
Seurat包里面熱圖,用的是ggplot2繪制的,一般處理這種問題,只要
獲取對象后重新指定一下數(shù)據(jù)標(biāo)準(zhǔn)化的范圍就好,搞一下配色什么的就完
事
p <- p + scale_fill_gradientn(limits=c(-2,2),
breaks =c(-2,0,2),
colours = PurpleAndYellow(),
na.value = "white") +
WhiteBackground()
本以為這樣就結(jié)束,打開結(jié)果一看?喵喵喵~ 什么鬼,那一條條的白線是個
什么玩意兒?
對比前后的結(jié)果,這些白色的部分在原始的圖形中都被當(dāng)作最大值處理(其
實是缺失值)。
沒問題~ 缺失值替換為黃色就好
第二次處理
p <- p + scale_fill_gradientn(limits=c(-2,2),
breaks =c(-2,-1,0,1,2),
colours = PurpleAndYellow(),
na.value = "yellow") +
WhiteBackground()
納尼~ 那些組間的分隔怎么也變成了屎黃色?看來這樣不對~
第三次處理
查看圖形對象中那些缺失的數(shù)據(jù)數(shù)據(jù)(原本是會有一些細(xì)胞也為缺失的,但我更新之后的ggplot對象沒法重復(fù)之前的結(jié)果,不記得之前ggplot2是哪個版本了)
p$data %>% filter(is.na(Expression))
# Feature Cell Expression Identity
# 1 Rbp7 hrspdmjykfoinzbwqvtc NA Fibroblasts
# 2 Sema3g hrspdmjykfoinzbwqvtc NA Fibroblasts
# 3 Gpihbp1 hrspdmjykfoinzbwqvtc NA Fibroblasts
# 4 Plpp1 hrspdmjykfoinzbwqvtc NA Fibroblasts
# 5 Ly6c1 hrspdmjykfoinzbwqvtc NA Fibroblasts
# 6 Emcn hrspdmjykfoinzbwqvtc NA Fibroblasts
這些奇怪名字的細(xì)胞就是用來生成那些組間分割的占位信息,在使用
na.value = "yellow" 時,把這些占位信息也給修改了,于是就有
了圖中的屎黃色分割,處理方法也簡單,只將那些正常細(xì)胞名稱的表
達量由NA替換為我們的最大值即可~ 隨后在scale_fill_gradientn中
將NA替換為白色即可~
第四次處理
本來經(jīng)過前面的處理,應(yīng)該已經(jīng)可以正常將熱圖的標(biāo)度修改為指定的
范圍~
But~
當(dāng)我重新運行腳本時卻出現(xiàn)了如下的報錯:
Error in data.frame(group = sort(x = group.use), x = x.divs) :
arguments imply differing number of rows: 2055, 0
Calls: PlotHeatmapPlot -> DoHeatmap -> data.frame
Execution halted
我原來正常的腳本都跑不了了這又是什么鬼明明之前還好好的能夠正常運行~
谷歌之~
Error in DoHeatmap – no labelling of identities above colourbar possible
看來是版本問題~
看一下自己環(huán)境里的r包,有人升級了ggplot2到3.3.3。
我也沒有記錄之前的ggplot2版本,之前的工作算是白做了~
看了一下Seurat的更新記錄,最新的版本已經(jīng)到了4.x.x,但所用對象使用的是3.1.1,所以找一個比較近的版本:

重新安裝一個v3.1.4版本的Seurat
里面的
DoHeatmap方法果然有所改變,對ggplot 3.3.3進行了適配

這個版本的ggplot2在重新標(biāo)準(zhǔn)化之后細(xì)胞不再會出現(xiàn)缺失值,前面的方法也呵呵了~
要消除白色的那些細(xì)胞,只需要將越過范圍的值給賦值為其邊界值即可
p$data[!is.na(p$data$Expression) & (p$data$Expression > 2),]$Expression <- 2
p$data[!is.na(p$data$Expression) & (p$data$Expression < -2),]$Expression <- -2

剩下的調(diào)整一下theme就好了