本文主要参考ggplot2画图——将筛选到的突变位点(基因)画到染色体上_如何绘制snp在染色体上的分布图-CSDN博客
上述博主是将位点标注于染色体上,本文主要是将目标区段(蓝色部分)标注在染色体上。
01.准备基础文件
chr_length_2.txt——染色体长度文件,通过TBtools获取(染色体长度怎么获取? - 知乎)
qtl_2.txt——目标区间文件,包含(染色体,起始位置,结束位置,以及与chr_length_2.txt相同的横坐标位置--chr_length_2.txt的横坐标位置在chr$x <- seq(1,6)+rep(seq(0,15,3),each=1) 代码中生成)
genes.txt——基因位置文件,包含(基因名称,基因起始位置,基因结束位置,与chr_length_2.txt相同的横坐标位置)
02 具体执行代码如下
rm (list=ls ()) ###清空环境
setwd("/Users/yulu/Desktop") ####setwd设置环境
library(ggplot2) ###加载ggplot2
install.packages("ggchicklet", repos = "https://cinc.rud.is")
library(ggchicklet)
chr <- read.table("chr_length_2.txt") #读取文件
colnames(chr) <- c("Chr","End") #命名列名
chr <- chr[order(chr$Chr),] #根据染色体名对数据进行排序
chr$x <- seq(1,6)+rep(seq(0,15,3),each=1) #计算染色体在图上的横坐标。这里有6条染色体,每条染色体宽为1,所以用seq(1,6)生成每条染色体的横坐标。且我希望3倍的染色体宽度,所以使用的方法是:rep(seq(0,15,3),each=1)
head(chr)
Chr End x
1 2 35937250 1
2 4 35502694 5
3 5 29958434 9
4 6 31248787 13
5 7 29697621 17
6 10 23207287 21
qtl <- read.table("qtl_2.txt") #读取文件
colnames(qtl) <- c("Chr","Start","End","x") #命名列名Chr Start End x
head(qtl)
Chr Start End x
1 2 23849813 27925718 1
2 4 22893919 34271097 5
3 5 23843993 28484888 9
4 6 4234201 9537606 13
5 7 1591894 4681830 17
6 10 6645044 13726954 21
genes <- read.table("genes.txt")
colnames(genes) <- c("gene","Start","End","x")
head(genes)
gene Start End x
1 a.1 24977336 24973386 1
2 a.2 27166898 27165434 1
3 b.1 30293040 30291461 5
4 b.2 31958630 31957653 5
5 b.3 33167054 33169943 5
6 c 25807160 25803530 9
pdf(file = "chr.pdf",height = 6,width = 10)###保存为pdf
p=ggplot()+
ggchicklet:::geom_rrect(chr,mapping=aes(ymin=0,ymax=End,xmin=x-0.5,xmax=x+0.5),
color="black",fill="white")+ ###绘制第一个图层-整体的染色体
geom_rect(qtl,mapping=aes(ymin=Start,ymax=End,xmin=x-0.5,xmax=x+0.5),
fill="#1874CD",alpha=0.6)+ ###绘制第二个图层-目标区段
geom_rect(genes,mapping=aes(ymin=Start,ymax=End,xmin=x-0.5,xmax=x+0.5),
color="black",fill="black",alpha=0.5)+ ##绘制第三个图层--目标基因的位置
theme_classic()
p
dev.off()
###ggchicklet:::geom_rrect是染色体两端变圆,xmin=x-0.5,xmax=x+0.5保持一致,确保x轴一致
03 结果