本文首发于“生信补给站”公众号 https://mp.weixin.qq.com/s/Gl6BChxSYbSHMo9oMpufPg
连锁不平衡图,用来可视化不同SNP之间的连锁程度,前同事间俗称“倒三角”图,。
本文使用自己的数据,因为安装R包后使用内置数据集运行出结果较容易,但是自己的数据就可能会有一些不大不小的“坑”,我替你们趟了。。。
一 载入R包 数据
数据为内置CEUData保存后,进行了“细微”的处理(去掉SNP碱基之间的“/”),因为这种基因型形式文件很常见;
library("LDheatmap") #读入数据 SNP <- read.csv("CEUSNP.csv",header = TRUE) pos <- read.csv("CEUDist.csv",header= TRUE) #查看数据 head(pos) SNP[1:4,1:4]
二 绘制连锁不平衡图
2.1 直接绘制
SNPpos<-pos$x
LDheatmap(SNP, SNPpos,color=grey.colors(20))
Error in LDheatmap(SNP, SNPpos, color = grey.colors(20)) :
column 1 is not a genotype object
额, 也许是因为没有“/”的原因,加上试试?
2.2 碱基型之间加“/“
怎么加呢? 首先想到 Tidyverse|数据列的分分合合,一分多,多合一的separate
和unite
,可是没有分隔符。。
经高人指点 ,使用替换的方式,解决方法很多。此处使用R-do包的函数
library(do) df <- na.omit(SNP) #A,C,G ,T 替换为A/,C/,G/,T/ df1 = do::Replace(df,pattern = c("A:A/","C:C/","G:G/","T:T/")) #去掉最后的/ SNPdata <- do::Trim(df1,"/") SNPdata[1:4,1:4] rs4615512 rs2283089 rs1894731 rs2283092 1 T/C C/C A/A T/T 2 T/C C/T A/A T/T 3 T/C C/C A/A T/T 5 T/C C/C A/A T/T
加上了,再次绘图
LDheatmap(SNPdata, SNPpos,color = grey.colors(20))
Error in LDheatmap(SNPdata, SNPpos, color = grey.colors(20)) :
column 1 is not a genotype object
额 ,还是不行,同样的报错。检索报错,尝试转换数据格式。
2.3 碱基型转为genotype object
使用genetics包的函数转化
library("genetics") for(i in 1:ncol(SNPdata)){ SNPdata[,i]<-as.genotype(SNPdata[,i]) } LDheatmap(SNPdata, SNPpos,color = grey.colors(20))
额 ,,,终于可以了。。。
三 图形调整,优化
3.1 调整颜色,更改标题,标示SNP名称
color.rgb <- colorRampPalette(rev(c("white","red")),space="rgb") ## 绘制连锁不平衡图 names <- c("rs1111183", "rs2237789", "rs2299531") LDheatmap(SNPdata, SNPpos, color=color.rgb(20), title = "DEU Pairwise LD", SNP.name=names,flip=TRUE)
3.2 使用grid调整SNP标记名称字体大小、颜色
library(grid) grid.edit(gPath("ldheatmap", "geneMap","SNPnames"), gp = gpar(col="black",lwd = 1,cex=0.7))
所谓的”倒三角图“完成,haploview软件也很好看,且有block,批量也许不太友好,见仁见智了!