一瘪板、寫在前面
- 扣扣群:559758504(目前無需驗證,一鍵即可加入)
- 如果你不想學瞳脓,老板又催著要澈侠,你可以加群私聊我尋求幫助( $ _ $ ),但還是自己學烧栋,知識都是自己的拳球。
- 實戰(zhàn)代碼,請看:【生信 | Circos實戰(zhàn)】
目前已有格式總結(歡迎補充):
1.染色體文件
2.統(tǒng)計分隔區(qū)間
3.統(tǒng)計基因密度(序列重復密度/TE轉座子密度/RNA分布密度均同理)
4.統(tǒng)計GC含量
5.統(tǒng)計區(qū)間內基因表達/SNP/peak豐度等(只要能測序的都可以)
6.共線性文件(種內魔吐,種間都可)
7.文字文件(常見基因ID標注)
二莱找、準備工作(可跳過)
1. 安裝必須的軟件(均在conda環(huán)境中安裝):
- 安裝Circos、bedtools辞色、BLAST谚赎、pyfaidx、samtools(裝過的conda會自動跳過)
conda install -c bioconda -y circos
conda install -c bioconda -y bedtools
conda install -c bioconda -y blast
conda install -c bioconda -y pyfaidx
conda install -c bioconda -y samtools
- 安裝MCScanX(要做共線性分析還需要安裝下面的軟件雳灵,不需要則略過)
wget https://archive.fastgit.org/wyp1125/MCScanX/archive/refs/heads/master.zip
unzip master.zip
cd MCScanX-master
make
# 測試安裝是否成功(能打印出來help信息則表示成功)
./MCScanX -h
# 成功則添加到環(huán)境變量
echo 'export PATH=$PATH:'"$(pwd)" >> ~/.bashrc
source ~/.bashrc
2. 下載擬南芥genome悯辙,gff3,pep文件
wget https://www.arabidopsis.org/download_files/Genes/TAIR10_genome_release/TAIR10_chromosome_files/TAIR10_chr_all.fas
wget https://www.arabidopsis.org/download_files/Genes/TAIR10_genome_release/TAIR10_gff3/TAIR10_GFF3_genes.gff
wget https://www.arabidopsis.org/download_files/Genes/TAIR10_genome_release/TAIR10_blastsets/TAIR10_pep_20101214_updated
# 微調一些官網(wǎng)上的文件格式
cut -d " " -f1 TAIR10_chr_all.fas | \
awk '{if($0~">"){print $0}else{printf "%s",$1}}' | \
sed 's/>/\n>/g' | grep -A1 -E ">[0-9]" | \
sed 's/>/>Chr/g' > tair10.genome.fa
cut -d " " -f1 TAIR10_pep_20101214_updated.txt > tair10.pep.fa
# 改名并刪除沒用的文件
mv TAIR10_GFF3_genes.gff tair10.gff3
rm TAIR10_chr_all.fas TAIR10_pep_20101214_updated.txt
三针贬、文件準備
- 先說明一點:circos中的數(shù)據(jù)都以
\t
分割拢蛋,數(shù)據(jù)表無表頭
1. 染色體文件,格式如下:
前2列:固定為`chr -`快压,表明我們要畫染色體輪廓
第3列:染色體ID垃瞧,像身份證號,`注意:如果ID中除了“_”有其他符號一律會報錯`
第4列:染色體Label脉幢,像人名嗦锐,會顯示在圖上而ID不會
第5列:染色體起始位置
第6列:染色體終止位置
第7列:染色體的顏色奕污,chr1-4,chry代表的都是circos內置顏色的名稱
chr - Chr1 C1 0 30427671 chr1
chr - Chr2 C2 0 19698289 chr2
chr - Chr3 C3 0 23459830 chr3
chr - Chr4 C4 0 18585056 chr4
chr - Chr5 C5 0 26975502 chr5
- 過程
genome=tair10.genome.fa
faidx ${genome} -i chromsizes > tair10.genome.size
awk -vFS="\t" -vOFS="\t" '{print "chr","-",$1,"C"NR,"0",$2,"chr"NR}' tair10.genome.size > circos.chromosome.txt
cat circos.chromosome.txt
# 結果如上表,由于chr1-5的顏色過于丑陋,因此我們'手動'修改為好看的顏色育灸,
# 后面就可以根據(jù)染色體的顏色對其他物體著色啦,如下:
chr - Chr1 C1 0 30427671 142,212,202
chr - Chr2 C2 0 19698289 180,224,101
chr - Chr3 C3 0 23459830 247,160,151
chr - Chr4 C4 0 18585056 131,178,210
chr - Chr5 C5 0 26975502 253,130,115
-vFS="\t"
:輸入文件的分隔符\t
-vOFS="\t"
:輸出文件的分隔符\t
NR
:表示行號儿子,正好可以和染色體的123等對應上砸喻,因此可以拿來用割岛,但是有x,y染色體的時候需要自己再手動調整一下
2. 統(tǒng)計分隔區(qū)間,格式如下:
第1列:染色體ID
第2列:起始分隔點
第3列:終止分割點
Chr1 0 100000
Chr1 100000 200000
Chr1 200000 300000
- 過程
genomeSize=tair10.genome.size
windowSize=100000
bedtools makewindows -g ${genomeSize} -w ${windowSize} | \
awk -vFS="\t" -vOFS="\t" '{print $1,$2,$3}' | \
bedtools sort -i - > ${genomeSize}.100kb
windowSize
:要根據(jù)你基因組的大小维咸,動態(tài)調整,因為擬南芥的每條染色體的序列長度都小于5kw瞬哼,因此我這里設置10萬為一個小區(qū)間租副,后面所有的數(shù)據(jù)統(tǒng)計都是基于此區(qū)間統(tǒng)計的,因此合適的區(qū)間選擇十分重要结胀。如果你研究的基因組每個都大于5kw永毅,則可以設置為100萬為一個區(qū)間。
bedtools sort
:由于后面要使用bedtools做一些統(tǒng)計着逐,因此需要排序意蛀,不過默認也是排好的,以防萬一秀姐。
3. 統(tǒng)計基因密度若贮,格式如下:
第1列:染色體ID
第2列:在染色體上的起始位置
第3列:在染色體上的終止位置
第4列:區(qū)間內基因的數(shù)目
Chr1 0 100000 29
Chr1 100000 200000 36
Chr1 200000 300000 31
- 過程
# 定義一些變量谴麦,后面修改方便
gff3=tair10.gff3
genomeSize=tair10.genome.size.100kb
grep '[[:blank:]]gene[[:blank:]]' ${gff3} | \
awk '{print $1"\t"$4"\t"$5}'| \
bedtools coverage -a ${genomeSize} -b - | \
cut -f 1-4 > circos.gene.density.txt
# 按理來說,上面的circos.gene.density.txt已經(jīng)足夠了舷蟀,不過我們可以修改文件批量美化
# 增加第5列面哼,顏色信息(非必須,可選)
awk -vFS="\t" -vOFS="\t" 'NR==FNR{arr[$3]=$3;brr[$3]=$7}NR!=FNR{if(arr[$1]=$1){print $0,"fill_color="brr[$1]}}' circos.chromosome.txt circos.gene.density.txt > circos.gene.density.color.txt
# 結果文件形式如下
Chr1 0 100000 29 fill_color=142,212,202
Chr1 100000 200000 36 fill_color=142,212,202
Chr1 200000 300000 31 fill_color=142,212,202
Chr1 300000 400000 31 fill_color=142,212,202
FNR
:每打開一個文件便重新計數(shù)匈子,而NR會一直累計代乃。推薦閱讀:【awk之NR==FNR問題】
再啰嗦一句擂橘,使用這種方法,還可以刻意的突出你想展示的區(qū)域通贞,對于不會perl的同學靈活度很大昌罩,而且還算比較方便
4. 統(tǒng)計GC含量,格式如下:
第1列:染色體ID
第2列:在染色體上的起始位置
第3列:在染色體上的終止位置
第4列:區(qū)間內GC堿基的數(shù)目
Chr1 0 100000 35627
Chr1 100000 200000 37655
Chr1 200000 300000 37903
- 代碼
genome=tair10.genome.fa
genomeSize=tair10.genome.size.100kb
bedtools nuc -fi ${genome} -bed ${genomeSize} | \
cut -f 1-3,5 | grep -v "#" | \
awk -vFS="\t" -vOFS="\t" '{print $1,$2,$3,$4*($3-$2)}' > circos.gc.density.txt
# 同樣在第5列添加和對應染色體相同的顏色(非必須遣总,可選)
awk -vFS="\t" -vOFS="\t" 'NR==FNR{arr[$3]=$3;brr[$3]=$7}NR!=FNR{if(arr[$1]=$1){print $0,"fill_color="brr[$1]}}' circos.chromosome.txt circos.gc.density.txt > circos.gc.density.color.txt
# 結果文件形式如下
Chr1 0 100000 35627 fill_color=142,212,202
Chr1 100000 200000 37655 fill_color=142,212,202
Chr1 200000 300000 37903 fill_color=142,212,202
awk
:計算GC含量的時候轨功,使用$4*($3-$2)
可以有效避免染色體末端含量異常,當然有時候末端比較短依然會有異常值垂券,那僅保留$4
再次嘗試一下
注:其他格式如奖亚,區(qū)域內基因的表達豐度,SNP豐度昔字,peak的豐度,等等等陨囊,你能轉換為上面的格式就行,算了胁塞,還是再簡單的舉一個基因表達的例子吧
5. 統(tǒng)計區(qū)間內基因表達/SNP/peak豐度等压语,以基因表達為例胎食,格式如下:
第1列:染色體ID
第2列:在染色體上的起始位置
第3列:在染色體上的終止位置
第4列:區(qū)間內基因表達豐度(也就是reads數(shù)目的多少)
Chr1 0 100000 3562
Chr1 100000 200000 3765
Chr1 200000 300000 3790
- 代碼
# 主要就是對比對后的bam文件,進行的區(qū)間統(tǒng)計
genomeSize=tair10.genome.size.100kb
bam=SRR3081110.bam
samtools index ${bam}
bedtools multicov -bams ${bam} -bed ${genomeSize} > circos.RNA.level.txt
# 結果文件格式和上面一樣
# 如果還想添加第5列顏色信息衩匣,也可以加上(非必須)
awk -vFS="\t" -vOFS="\t" 'NR==FNR{arr[$3]=$3;brr[$3]=$7}NR!=FNR{if(arr[$1]=$1){print $0,"fill_color="brr[$1]}}' circos.chromosome.txt circos.RNA.level.txt > circos.RNA.level.color.txt
# 結果文件形式如下酣倾,一般不用 fill_color,因為豐度一般用熱圖表示最好午绳,所以這一步不用做
Chr1 0 100000 3562 fill_color=142,212,202
Chr1 100000 200000 3765 fill_color=142,212,202
Chr1 200000 300000 3790 fill_color=142,212,202
6. 共線性文件,格式如下:
第1列:染色體ID搞糕,指連線起始的染色體
第2列:連線起始的染色體的起始位置
第3列:連線起始的染色體的終止位置
第4列:染色體ID曼追,指連線的終止染色體
第5列:連線終止的染色體的起始位置
第6列:連線終止的染色體的終止位置
Chr1 6265416 6266937 Chr1 27686992 27688127
Chr1 6331398 6333743 Chr1 27759973 27761588
- 物種內做共線性
這里不解釋細節(jié)礼殊,看原理戳這里【物種內共線性分析】针史,或有疑問碟狞,加群提出
不過,有一點我再提一下射亏,因為大多數(shù)教程都沒有說,就是不要一味的使用MCScanX+前綴
而不自己設定參數(shù)竭业,-k,-g,-s,-m參數(shù)很重要智润,會極大的影響結果,它默認的并不一定是最好的
2021年12月2日更新
:for循環(huán)可以并行了未辆,速度提升約100
倍窟绷,幾乎秒出結果。
mkdir blastdb
mkdir blastresult
pep=tair10.pep.fa
gff3=tair10.gff3
makeblastdb -in ${pep} -dbtype prot -out ./blastdb/tair10
blastp -query ${pep} -db ./blastdb/tair10 -out ./blastresult/tair10.blast -evalue 1e-10 -num_threads 10 -outfmt 6 -num_alignments 5
# 格式化gff3文件咐柜,后面用的gff3都是格式化好的兼蜈,千萬注意
awk -vFS="\t" -vOFS="\t" '{if($3=="mRNA"){match($9,/ID=([^;]+)/,a);sub(/ID=/,"",a[0]);print $1,a[0],$4,$5}}' ${gff3} > ./blastresult/tair10.gff
cd blastresult
MCScanX ./blastresult/tair10
# 為了能從collinearity中提取用于circos的數(shù)據(jù)格式,這里講解兩種方法
# 第一種:以單個基因對單個基因來做(比較簡單为狸,但最后circos圖很亂)
cd ./blastresult
grep -v "#" tair10.collinearity | cut -f2,3 | \
awk -vFS="\t" -vOFS="\t" 'NR==FNR{arr[$2]=$2;brr[$2]=$1"\t"$3"\t"$4}NR!=FNR{if(arr[$1]==$1)print brr[$1],$2}' tair10.gff - | \
awk -vFS="\t" -vOFS="\t" 'NR==FNR{arr[$2]=$2;brr[$2]=$1"\t"$3"\t"$4}NR!=FNR{if(arr[$4]==$4)print $1,$2,$3,brr[$4]}' tair10.gff - > ../circos.link.txt
# 增加顏色信息(非必須,但推薦做)
awk -vFS="\t" -vOFS="\t" 'NR==FNR{arr[$3]=$3;brr[$3]=$7}NR!=FNR{if(arr[$1]=$1){print $0,"color="brr[$1]}}' ../circos.chromosome.txt ../circos.link.txt > ../circos.link.color.txt
# 最終文件格式如下
Chr1 6265416 6266937 Chr1 27686992 27688127 color=142,212,202
Chr1 6331398 6333743 Chr1 27759973 27761588 color=142,212,202
Chr1 6336528 6342460 Chr1 27770986 27776857 color=142,212,202
# 第二種:以block來做(使用circos的絲帶效果更好看遗契,更推薦辐棒,但相對來說難理解一點,不過你能跑通就行牍蜂,掉頭發(fā)的事情我來做)
# 你只要是按照上面的流程跑下來的漾根,定義好下面的這兩個變量,直接執(zhí)行for循環(huán)即可
collinearity=tair10.collinearity
gff=tair10.gff
# ------------------------------------------------------------
for i in $(tail -1 ${collinearity} | cut -d "-" -f1);do
for ((j=0;j<=$i;j++));do
{ grep -w "${j}-" ${collinearity} | cut -f2,3 | \
awk -vFS="\t" -vOFS="\t" 'NR==FNR{arr[$2]=$2;brr[$2]=$1"\t"$3"\t"$4}NR!=FNR{if(arr[$1]==$1)print brr[$1],$2}' ${gff} - | \
awk -vFS="\t" -vOFS="\t" 'NR==FNR{arr[$2]=$2;brr[$2]=$1"\t"$3"\t"$4}NR!=FNR{if(arr[$4]==$4)print $1,$2,$3,brr[$4]}' ${gff} - > block.${j}
chr_l=$(head -1 block.${j}|cut -f1)
min_l=$(sort -k2n block.${j}|head -1|cut -f2)
max_l=$(sort -k2nr block.${j}|head -1|cut -f3)
chr_r=$(head -1 block.${j}|cut -f4)
min_r=$(sort -k5n block.${j}|head -1|cut -f5)
max_r=$(sort -k6nr block.${j}|head -1|cut -f6)
echo -e ${chr_l}"\t"${min_l}"\t"${max_l}"\t"${chr_r}"\t"${min_r}"\t"${max_r} >> block.merge; }&
done; wait; clear
cp block.merge ../circos.link.block.txt
rm block.*
echo -e "\033[1;32mSuccess: \033[36m you can find it from [../circos.link.block.txt]\033[0m"
done
# ------------------------------------------------------------
# 最終文件(../circos.link.block.txt)格式如下(可以看出鲫竞,區(qū)間更大了)
Chr1 6265416 7292507 Chr1 27686992 28717416
Chr1 8845231 9469634 Chr1 25524718 26389916
Chr1 5896416 6179289 Chr1 27217477 27603317
# 當然依舊可以增加顏色信息(非必須辐怕,但推薦做)
awk -vFS="\t" -vOFS="\t" 'NR==FNR{arr[$3]=$3;brr[$3]=$7}NR!=FNR{if(arr[$1]=$1){print $0,"color="brr[$1]}}' ../circos.chromosome.txt ../circos.link.block.txt > ../circos.link.block.color.txt
Chr1 6265416 7292507 Chr1 27686992 28717416 color=142,212,202
Chr1 8845231 9469634 Chr1 25524718 26389916 color=142,212,202
Chr1 5896416 6179289 Chr1 27217477 27603317 color=142,212,202
- 物種間做共線性
原理與物種內類似,就是一個建庫从绘,用另一個比對寄疏,然后將二者的處理過的gff文件(不是gff3)合并操作即可,不過為了展示在circos圖上僵井,有一點不太一樣的是赁还,你需要為每一個物種準備上面的所有東西,相信你應該可以觸類旁通驹沿,下面是我簡單做了四個物種間的共線性展示。
7. 文字文件蹈胡,格式如下:
第1列:染色體ID
第2列:在染色體上的起始位置
第3列:在染色體上的終止位置
第4列:基因ID或者其他任何文字均可
hs1 100425066 100487997 DBT
hs1 10381671 10402787 PGD
- 代碼渊季,這種應該非常簡單朋蔫,你應該能搞定吧
# 首先,這種情況就是你在有一堆基因列表時却汉,想獲取基因區(qū)間的時候用到
# 比如說我先在有以下的基因名(必須保證gff3文件中有你的基因名)
head tair10.gene.list.some.txt
AT1G01010
AT2G01008
AT3G01010
AT4G00005
AT5G01010
# 從gff3中提取基因列表
gff3=tair10.gff3
awk -vFS="\t" -vOFS="\t" '{if($3=="gene"){match($9,/ID=([^;]+)/,a);sub(/ID=/,"",a[0]);print $1,$4,$5,a[0]}}' ${gff3} > ${gff3%%.*}.gene.list.all.txt
head ${gff3%%.*}.gene.list.all.txt
Chr1 3631 5899 AT1G01010
Chr1 5928 8737 AT1G01020
Chr1 11649 13714 AT1G01030
Chr1 23146 31227 AT1G01040
# 使用grep提取即可(注意前面一個文件(*some.txt)最后不能有空行驯妄,否則會全部提出來)
grep -f tair10.gene.list.some.txt tair10.gene.list.all.txt > circos.text.txt
# 甚至你想標記顏色的話,還可以添加顏色信息(非必須)
awk -vFS="\t" -vOFS="\t" 'NR==FNR{arr[$3]=$3;brr[$3]=$7}NR!=FNR{if(arr[$1]=$1){print $0,"color="brr[$1]}}' circos.chromosome.txt circos.text.txt > circos.text.color.txt
Chr1 3631 5899 AT1G01010 color=142,212,202
Chr2 1025 2810 AT2G01008 color=180,224,101
Chr3 4342 4818 AT3G01010 color=247,160,151
Chr4 1180 1536 AT4G00005 color=131,178,210
Chr5 1223 5061 AT5G01010 color=253,130,115