顺式元件热图+柱状图

news2024/11/27 4:24:12

写在前面

本教程来自粉丝投稿,主要做得是顺式元件的预测和热图绘制。类似的教程,在我们基于TBtools做基因家族分析也做过,流程基本一致。我们前期的教程,主要是基于TBtools,本教程主要是基于纯代码,也是值得学习+收藏的教程。


目的

在进行基因家族分析时,我们经常会对候选基因的启动子元件类型进行分析,该步骤主要是实现顺式元件热图+柱状堆积图的组合图。

方法

1. 数据准备及整理

1、ref #基因组:如果有多个基因组可以直接合并到一起,但注意染色体编号的区分,可以更改成染色体号_物种 
>Chr01_Ath
ATGC....
>Chr01_Sol
ATGC....

2、bed #基因组注释文件(bed格式),如果只有gff,可以使用gff2bed等软件或者awk基础命令行进行更改

3、genelist #基因分组关系文件*.list,文件分两列,第一列为基因id,第二列为物种/聚类分组等信息
部分数据展示:
gene_id Genetype
geneA1    Ath
geneA2    Ath
geneA3    Ath
geneB1    Sol
geneB2		Sol
geneB3	  Sol

2. 依赖软件

conda install -c bioconda seqkit

3. 分析步骤

1)获得启动子序列
启动子是DNA序列,可以被RNA 聚合酶识别、与其结合从而开始转录,它含有RNA 聚合酶特异性结合和转录起始所需的保守序列,多数位于结构基因转录起始点的上游,启动子本身不被转录。启动子的特性最初是通过能增加或降低基因转录速率的突变而鉴定的。启动子一般位于转录起始位点的上游几百至几千bp不等。

# 提取目的基因位置文件
grep -wf <(cut -f 1 ${genelist}) ${gff%.*}.bed >pick_merge.bed
# 提取基因启动子序列,一般默认上游3K
seqkit subseq -u 3000 --bed pick_merge.bed -f -o gene_up3000.fa ${ref} -w 0

2)元件预测
登录网站:(http://bioinformatics.psb.ugent.be/webtools/plantcare/html/),提交提取的启动子序列和邮箱号,预测结束后会将结果(plantCARE_output_PlantCARE_*.tab文件)发至邮箱。

## plantCARE_output_PlantCARE_*.tab
geneA1       CAT-box GCCACT  1003    6       -       Arabidopsis thaliana    cis-acting regulatory element related to meristem expression 
geneA2       CAT-box GCCACT  1525    6       +       Arabidopsis thaliana    cis-acting regulatory element related to meristem expression 
geneA3       LTR     CCGAAA  459     6       -       Hordeum vulgare cis-acting element involved in low-temperature responsiveness

#注意文件长度不等
数据解读:
A:ID
B:名称
C:motif
D:起始位置
E:motif 长度
F:正负链
G-H:功能描述

3)手动分类
根据最后一列的功能描述进行分类,例如生长素相关,光周期相关(英文标注)等等,将分类补充至最后一列。手动分类好后摘取关注分类的数据即可,并重新命名文件即可。(如:plant_class.tab)

#部分数据展示
geneA1       CAT-box GCCACT  1003    6       -       Arabidopsis thaliana    cis-acting regulatory element related to meristem expression    cell cycle
geneA1       CAT-box GCCACT  1525    6       +       Arabidopsis thaliana    cis-acting regulatory element related to meristem expression    cell cycle
geneA1       LTR     CCGAAA  459     6       -       Hordeum vulgare cis-acting element involved in low-temperature responsiveness   low-temperature
geneA2       LTR     CCGAAA  1178    6       +       Hordeum vulgare cis-acting element involved in low-temperature responsiveness   low-temperature
geneA2       TGACG-motif     TGACG   61      5       +       Hordeum vulgare cis-acting regulatory element involved in the MeJA-responsiveness       MeJA
geneA2       TGACG-motif     TGACG   89      5       +       Hordeum vulgare cis-acting regulatory element involved in the MeJA-responsiveness       MeJA

4)提取分类信息,准备绘图数据

awk -F '\t' 'NF==9' plant_class.tab >plant_class.tab.filt.xls
echo -e "type\tclass" >core_class.xls && cut -f 2,9 plant_class.tab.filt.xls |sort -u |sed -e "s/ /|/g" |sort -k 2 |sed -e "s/|/ /g" >>column_class.xls
python stat.py plant_class.tab.filt.xls row_anno.xls column_class.xls total.plot.xls
cut -f 2- stat_class.xls >plot_bar.xls
grep -vw '#AAA' stat_core.xls |cut -f 2- >plot_core.xls
join <(sort -k 1,1  plot_core.xls |sed -e 's/ /_/g' ) <(sort -k 1,1 plot_bar.xls |sed -e 's/ /_/g' ) |sed -e "s/\s\+/\t/g" -e "s/_/ /g" >total.plot.xls

#上述步骤整理得到绘图文件
total.plot.xls 


5)作图,最后AI调整一下细节即可。

Rscript cis_heatmap_bar.r --ra new_row_anno.xls --class column_class.xls --plot total_plot.xls --out out.pdf

脚本

import sys
import pandas as pd
from collections import defaultdict
import numpy as np

col_names = ["gene","type","seq","s_pos","score","strand","spe","anno","group"]
df = pd.read_csv(sys.argv[1],sep="\t",names=col_names)
df2 = pd.read_csv(sys.argv[2],sep="\t")
df3 = pd.read_csv(sys.argv[3],sep="\t")

stat_yunjian_dic =defaultdict(list)
stat_type_dic = defaultdict(list)

# np.array(chr_group["group"].drop_duplicates()).tolist()
yuanjian_type = np.array(df3["type"].drop_duplicates()).tolist()
gene_id = np.array(df["gene"].drop_duplicates()).tolist()
class_id = np.array(df3["class"].drop_duplicates()).tolist()

cl = ["Class","#AAA"]
stat_yunjian_dic["gene_id"]=gene_id
stat_type_dic["gene_id"]=gene_id
for g in gene_id:
    stat_yunjian_dic["spe"].append(df2[df2["gene_id"]== g].iloc[0,1])
    stat_type_dic["spe"].append(df2[df2["gene_id"]== g].iloc[0,1])
    for t in yuanjian_type:
        num = len(df[(df["gene"]== g) & (df["type"] == t)])
        stat_yunjian_dic[t].append(num)
    for c in class_id:
        c_num = len(df[(df["gene"]== g) & (df["group"] == c)])
        stat_type_dic[c].append(c_num)

for t in yuanjian_type:
    cl.append(df3[df3["type"] == t].iloc[0,1])

core_df =pd.DataFrame(data=stat_yunjian_dic)
#out_core_df.columns=cl
core_df.loc[len(core_df.index)] =cl

out_class_df = pd.DataFrame(data=stat_type_dic)

#sort
out_class_df.sort_values(by=["spe"] , inplace=True, ascending=True)
core_df.sort_values(by=["spe"] , inplace=True, ascending=True)

out_core_df = core_df.loc[:,["spe","gene_id"]+yuanjian_type]
out_class_df = out_class_df.loc[:,["spe","gene_id"]+class_id]

out_total=pd.merge(out_core_df,out_class_df,on='gene_id').drop('spe_x', axis=1)
out_total.to_csv(sys.argv[4],index=False,sep="\t")
library(tidyverse)
library(RColorBrewer)
library(ggplot2)
library(ComplexHeatmap)
library(colorRamp2)
library(argparser)

#设置参数类型、默认值及说明
argv <- arg_parser('')
argv <- add_argument(argv,"--ra", help="输入文件,row_anno,gene_id\tGenetype")
argv <- add_argument(argv,"--class", help="输入文件,core_class,type\tclass")
argv <- add_argument(argv,"--plot",help="输入文件,total_plot.xls")
argv <- add_argument(argv,"--out",default="pdf",help="输出文件类型:pdf/jpg/png")
argv <- parse_args(argv)
#将参数传入变量中
row_anno <- argv$ra
core_class<-argv$class
plot_core<-argv$plot
out <-argv$out


# 这些需要将导入的注释信息转化为data.frame 格式
annotation_row<-read.table(row_anno,header=T,sep="\t")
annotation_row <- as.data.frame(annotation_row)
annotation_col<-read.table(core_class,header=T,sep="\t")
annotation_col <- as.data.frame(annotation_col)

#颜色配置,可手动调整
col_fun = colorRamp2(c(0,3,5,10,15), c('#d9d9d9', '#addd8e', '#b10026', '#fd8d3c','#009db2'))
lgd_row_len <- length(unique(annotation_row$Genetype))
lgd_col_len <- length(unique(annotation_col$class))
core_len <-length(annotation_col$class)
d_s <- core_len+1
d_e <- core_len+lgd_col_len

#数据集
df <-read.table(plot,sep="\t",header=T,row.names = 1)
cell1 <-df[ ,1:core_len]
cell1[cell1==0]<-NA
data1 <- df[ ,d_s:d_e]


p1 = Heatmap(cell1,
              col = col_fun,
              na_col = "white",
              # 去掉行列聚类:
              cluster_rows = F,
              cluster_columns = F,
              row_names_side = "left",
              column_names_side = "top",
              #show_heatmap_legend = F,
              # 行名和列名:
              row_names_gp = gpar(fontsize = 10, font = 3),
              column_names_gp = gpar(fontsize = 10, font = 3),
              row_order = annotation_row$gene_id,
              row_split = annotation_row$Genetype,#行截断(按照pathway,不像之前随机)
              row_gap = unit(1, "mm"),
              column_gap = unit(1, "mm"),
              border = TRUE,
              #column_order = annotation_col$type,
              column_split = annotation_col$class,#列截断
              #格子大小
              heatmap_width = unit(0.5,"npc"),
              heatmap_height = unit(0.5, "npc"),
              #柱状图
              right_annotation = rowAnnotation(
               bar = anno_barplot(axis_param = list(side="top"),width = unit(30,"cm"),data.matrix(data1),gp=gpar(fill=rainbow(lgd_col_len)))
              ),
              # 添加文字注释:
              cell_fun = function(j, i, x, y, width, height, fill) {
                if (!is.na(cell1[i,j])) {
                  grid.text(sprintf("%s", cell1[i, j]), x, y,
                            gp = gpar(fontsize = 8, col = "black"))
                  grid.rect(x, y, width, height,
                            gp = gpar(col = "grey", fill = NA, lwd = 0.8))
                }else{
                  grid.rect(x, y, width, height,
                            gp = gpar(col = "grey", fill = NA, lwd = 0.8))
                }
              })

p2 <-Heatmap(t(annotation_col$class),
             column_split = annotation_col$class,
             col = rainbow(lgd_col_len),
             cluster_columns = FALSE,
             heatmap_height = unit(0.5, "npc"),
             border = T)

pdf(out,height = 15,width = 30)
p1_p2 = p1 %v% p2
p1_p2
dev.off()

往期文章:

1. 最全WGCNA教程(替换数据即可出全部结果与图形)

  • WGCNA分析 | 全流程分析代码 | 代码一

  • WGCNA分析 | 全流程分析代码 | 代码二

  • WGCNA分析 | 全流程代码分享 | 代码三

  • WGCNA分析 | 全流程代码分享 | 代码四

2. 精美图形绘制教程

  • 精美图形绘制教程

小杜的生信筆記,主要发表或收录生物信息学的教程,以及基于R的分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/969179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【人工智能】—_线性分类器、感知机、损失函数的选取、最小二乘法分类、模型复杂性和过度拟合、规范化

文章目录 Linear predictions 线性预测分类线性分类器感知机感知机学习策略损失函数的选取距离的计算 最小二乘法分类求解最小二乘分类矩阵解法一般线性分类模型复杂性和过度拟合训练误差测试误差泛化误差复杂度与过拟合规范化 Linear predictions 线性预测 分类 从具有有限离…

2022年03月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;红与黑 有一间长方形的房子&#xff0c; 地上铺了红色、 黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上&#xff0c; 只能向相邻的黑色瓷砖移动。 请写一个程序&#xff0c; 计算你总共能够到…

Aqs的CyclicBarrier。

今天我们来学习AQS家族的“外门弟子”&#xff1a;CyclicBarrier。 为什么说CyclicBarrier是AQS家族的“外门弟子”呢&#xff1f;那是因为CyclicBarrier自身和内部类Generation并没有继承AQS&#xff0c;但在源码的实现中却深度依赖AQS家族的成员ReentrantLock。就像修仙小说…

Java 复习笔记 - 学生管理系统篇

文章目录 学生管理系统一&#xff0c;需求部分需求分析初始菜单学生类添加功能删除功能修改功能查询功能 二&#xff0c;实现部分&#xff08;一&#xff09;初始化主界面&#xff08;二&#xff09;编写学生类&#xff08;三&#xff09;编写添加学生方法&#xff08;四&#…

ref 操作 React 定时器

秒表 需要将 interval ID 保存在 ref 中&#xff0c;以便在需要时能够清除计时器。 import { useRef, useState } from "react";const SecondWatch () > {const [startTime, setStartTime] useState<any>(null);const [now, setNow] useState<any>…

Elasticsearch中RestClient使用

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

如何将自己的镜像使用 helm 部署

本文分别从如下几个方面来分享一波 如何将自己的镜像使用 helm 部署 简单介绍一下 helm 使用自己写 yaml 文件的方式在 k8s 中部署应用 使用 helm 的方式在 k8s 中部署应用 简单介绍一下 helm Helm 是 Kubernetes 的包管理器&#xff0c;在云原生领域用于应用打包和分发 Hel…

12. 微积分 - 梯度积分

Hi,大家好。我是茶桁。 上一节课,我们讲了方向导数,并且在最后留了个小尾巴,是什么呢?就是梯度。 我们再来回看一下但是的这个式子: [ f x f y

信息系统项目管理师(第四版)教材精读思维导图-第八章项目整合管理

请参阅我的另一篇文章&#xff0c;综合介绍软考高项&#xff1a; 信息系统项目管理师&#xff08;软考高项&#xff09;备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图PDF格式 本章思维导图XMind源文件 目录 8.1 管理基础 8.2 管理过程 8.3 制定项…

LRU算法 vs Redis近似LRU算法

LRU(Least Recently Use)算法&#xff0c;是用来判断一批数据中&#xff0c;最近最少使用算法。它底层数据结构由Hash和链表结合实现&#xff0c;使用Hash是为了保障查询效率为O(1)&#xff0c;使用链表保障删除元素效率为O(1)。 LRU算法是用来判断最近最少使用到元素&#xf…

最短路Dijkstra,spfa,图论二分图算法AYIT---ACM训练(模板版)

文章目录 前言A - Dijkstra Algorithm0x00 算法题目0x01 算法思路0x02 代码实现 B - 最长路0x00 算法题目0x01 算法思路0x02 代码实现 C - 二分图最大匹配0x00 算法题目0x01 算法思路0x02 代码实现 D - 搭配飞行员0x00 算法题目0x01 算法思路0x02 代码实现 E - The Perfect Sta…

企业架构LNMP学习笔记11

Nginx配置文件的介绍&#xff1a; #nginx子进程启动用户 #user nobody; #子进程数量 一般调整为cpu核数或者倍数 worker_processes 1; #错误日志定义 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#进程pid 存储文件…

ISO/IEC/ITU标准如何快速查找(三十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

C++中的语法知识虚继承和虚基类

多继承(Multiple Inheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。 多继承时很容易产生命名冲突,即使我们很小心地将所有类…

UDP和TCP协议报文格式详解

在初识网络原理(初识网络原理_蜡笔小心眼子&#xff01;的博客-CSDN博客)这篇博客中,我们简单的了解了一下TCP/IP五层网络模型,这篇博客将详细的学习一下五层网络模型中传输层的两个著名协议:UDP和TCP 目录 一, 传输层的作用 二, UDP 1,UDP协议的特点 2,UDP报文格式 三, TC…

【数据结构】如何设计循环队列?图文解析(LeetCode)

LeetCode链接&#xff1a;622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09; 目录 做题思路 只开辟 k 个空间 多开一个空间 代码实现 1. 循环队列的结构 2. 开辟空间 3. 判断空 4. 判断满 5. 队尾插入数据 6. 队头删除数据 7. 获取队头元素 8. 获取队尾元…

ElasticSearch第二讲:ES详解 - ElasticSearch基础概念

ElasticSearch第二讲&#xff1a;ES详解 - ElasticSearch基础概念 在学习ElasticSearch之前&#xff0c;先简单了解下ES流行度&#xff0c;使用背景&#xff0c;以及相关概念等。本文是ElasticSearch第二讲&#xff0c;ElasticSearch的基础概念。 文章目录 ElasticSearch第二讲…

【GoldenDict】win11牛津高阶英汉双解词典安装使用方法

【词典资源】 1&#xff08;本文章使用的版本&#xff09;牛津高阶&#xff08;第10版 英汉双解&#xff09; V11.8&#xff1a; https://pan.baidu.com/s/11272Cldde_2UttQkWS2MlQ 提取码&#xff1a;0p3j 2&#xff08;另一版本&#xff09;第十版 v13.2&#xff1a; ht…

信息系统项目管理师(第四版)教材精读思维导图-第九章项目范围管理

请参阅我的另一篇文章&#xff0c;综合介绍软考高项&#xff1a; 信息系统项目管理师&#xff08;软考高项&#xff09;备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图PDF格式 本章思维导图XMind源文件 目录 9.1 管理基础 9.2 管理过程 9.3 规划范…

【Linux】线程安全-信号量

文章目录 信号量原理信号量保证同步和互斥的原理探究信号量相关函数初始化信号量函数等待信号量函数释放信号量函数销毁信号量函数 信号量实现生产者消费者模型 信号量原理 信号量的原理&#xff1a;资源计数器 PCB等待队列 函数接口 资源计数器&#xff1a;对共享资源的计…