MATLAB | 如何使用MATLAB绘制序列logo图

77 篇文章 336 订阅
订阅专栏

这次开发了一个生物信息学比较常用的序列logo图绘制MATLAB代码包,绘制效果如下:

数据来自基迪奥生物项目编号为seqlogojrois9l2jit的示例数据。同时本工具函数参考以下文献:

  • Tareen A, Kinney J B. Logomaker: beautiful sequence logos in Python[J]. Bioinformatics, 2020, 36(7): 2272-2274.
  • Crooks G E, Hon G, Chandonia J M, et al. WebLogo: a sequence logo generator[J]. Genome research, 2004, 14(6): 1188-1190.

教程部分

1 数据格式

char矩阵

数据使用char类型矩阵,每一行代表一条序列:

Data =['GNYLGLTVETISRLL';
    'GNYLGLTVETISRLL';
    'GNYLGLTVETISRLL';
    'GNYLGLTIETISRLL']

名称与序列txt

当然我们可以从txt文件中读取数据,若数据是这样一行名称一行序列的格式:

>seq01
ACCCTGTAAGTTTT
>seq02
TCAGTGTAAGTATC
>seq03
CATTCGTAAGTACC
>seq04
CGCTGGTAAGGACT
>seq05
ACCGGGTGAGCGCG

则可通过如下代码读取:

Data=readcell('seqlogo_DNA.txt');
Data=Data(2:2:end,1);
Data=reshape([Data{:}],[],length(Data))';

序列txt

若txt文件中只有序列:

GNYLGLTVETISRLL
ASYLGLRLETVCRSV
SEMTGTTLHTVSRLL
AEMTGTTLHTVSRIL
AEMTGTTLHTVSRIL
AEMTGTTVETTIRVM
ASRVGLTVQTVSTIV
AARLGLTPETFSRVL
ADYLGTTPETVSRTL
ADMLGSKRETVSRQL
ANYIGTSPETISRKI
ATFIGTTPETISRKF
SAFIGTTPETISRKL
ADVLGLSVVHMNRVI
ADALGLTPIHINRML
AEAIGSTRVTVTRLL
GNYLGLTVETISRLL
GNYLGLTVETISRLL
GNYLGLTIETISRLL
GNYLGLTIETISRLL
GNYLGLTVETISRLL
GNYLGLTVETISRLL

则可通过如下代码读取:

Data=readcell('seqlogo_protein_3.txt');
Data=reshape([Data{:}],[],length(Data))';

2 单位显示

有Bits和Probability供用户选择,默认bits。logo图纵坐标的单位常见有两种,一种是百分比,另一种是Bits。对于Probability,很好理解,每个字母的出现频率;对于Bits,可参考下面的公式:

R s e q = S max  − S o b s = log ⁡ 2 N − ( − ∑ n = 1 N p n log ⁡ 2 p n ) R_{s e q}=S_{\text {max }}-S_{o b s}=\log _2 N-\left(-\sum_{n=1}^N p_n \log _2 p_n\right) Rseq=Smax Sobs=log2N(n=1Npnlog2pn)

p n p_n pn是相应位置n上相应字符出现频率,N是不同字符的总数量(核酸为4,蛋白质为20)。因此,对于图中的y轴的最大数值就不难理解,核酸序列的最大值为 log ⁡ 2 4 = 2 \log_2 4 = 2 log24=2bits,蛋白序列为 log ⁡ 2 20 ≈ 4.32 \log_2 20≈4.32 log2204.32 bits。

可以通过设置函数的Method属性来调整显示单位,可选值为'Bits'/'Prob',其中Bits为默认值。

3 核酸序列绘制示例

Type属性设置为NA即可绘制核酸序列logo图,当然参数的默认值就是NA所以不设置也可以,以下给出绘制核酸序列显示单位分别为Bits和Probability的绘制代码和绘图结果:

Data=readcell('seqlogo_DNA.txt');
Data=Data(2:2:end,1);
Data=reshape([Data{:}],[],length(Data))';

figure()
seqLogo(Data)

figure()
seqLogo(Data,'Method','Prob')   

4 蛋白序列绘制示例

Type属性设置为PR即可绘制蛋白序列logo图:

Data=readcell('seqlogo_protein_2.txt'); 
Data=Data(2:2:end,1);
Data=reshape([Data{:}],[],length(Data))';

figure()
seqLogo(Data,'Type','PR')

figure()
seqLogo(Data,'Type','PR','Method','Prob') 

5 核酸序列配色

对于每个字母都可以单独设置颜色,自由度比较高,举个例子,将颜色设置为:
{‘C’,[205,255,101]./255,
‘A’,[104,101,255]./255,
‘TU’,[164,230,101]./255,
‘G’,[104,203,254]./255}:

Data=readcell('seqlogo_DNA.txt');
Data=Data(2:2:end,1);
Data=reshape([Data{:}],[],length(Data))';

Color={'C',[205,255,101]./255,'A',[104,101,255]./255,'TU',[164,230,101]./255,'G',[104,203,254]./255};
% Color={'C',[127,91,93]./255,'A',[187,128,110]./255,'TU',[197,173,143]./255,'G',[59,71,111]./255};

figure()
seqLogo(Data,'Color',Color)

figure()
seqLogo(Data,'Method','Prob','Color',Color)    

设置为:
{‘C’,[127,91,93]./255,
‘A’,[187,128,110]./255,
‘TU’,[197,173,143]./255,
‘G’,[59,71,111]./255}

5 蛋白序列配色

对于每个字母都可以单独设置颜色,自由度比较高,下面可以设置任意多组颜色,随意划分分组:

Data=readcell('seqlogo_protein_3.txt');
Data=reshape([Data{:}],[],length(Data))';

Color={'CDEFH',[205,255,101]./255,'AIKLM',[104,101,255]./255,'TUNPQR',[164,230,101]./255,'GSVWY',[104,203,254]./255};
% Color={'CDEFH',[127,91,93]./255,'AIKLM',[187,128,110]./255,'TUNPQR',[197,173,143]./255,'GSVWY',[59,71,111]./255};

figure()
seqLogo(Data,'Type','PR','Color',Color)

figure()
seqLogo(Data,'Type','PR','Method','Prob','Color',Color) 

.

6 子图

当然subplot函数啥的也可以用:

Data=readcell('seqlogo_DNA.txt');
Data=Data(2:2:end,1);
Data=reshape([Data{:}],[],length(Data))';

figure()
subplot(2,1,1)
seqLogo(Data)

subplot(2,1,2)
seqLogo(Data,'Method','Prob')  


工具函数完整代码

仅代码无法运行,需要文件夹内有logoData.mat文件,此处仅做展示,完整代码+mat文件+示例数据可以从文末提供的MATHWORKS的fileexchange链接地址下载,或者从文末网盘链接下载。

function seqLogo(varargin)
% @author : slandarer
% gzh  : slandarer随笔
% Zhaoxu Liu / slandarer (2023). sequence logos (序列logo图) 
% (https://www.mathworks.com/matlabcentral/fileexchange/123060-sequence-logos-logo), 
% MATLAB Central File Exchange. 检索来源 2023/1/10.
% =========================================================================
% Color  | 配色              | {'A',[]./255,'C',[]./255,... ...}
% Method | 比例计算方法       | Bits/Prob
% Type   | 种类(核酸/蛋白质)  | NA/PR
coe.arginList={'Color','Method','Type'};
% 数据预定义
logoData=load('logoData.mat');
coe.Color={'CDEFH',[37,92,153]./255,'AIKLM',[16,150,72]./255,'TUNPQR',[214,40,57]./255,'GSVWY',[247,179,43]./255};
coe.Method='Bits';
coe.Type='NA';
% 坐标区域获取
if isa(varargin{1},'matlab.graphics.axis.Axes')
    coe.ax=varargin{1};varargin(1)=[];
else
    coe.ax=gca;
end
% 获取其他数据
coe.Data=varargin{1};varargin(1)=[];
for i=1:2:(length(varargin)-1)
    tid=ismember(coe.arginList,varargin{i});
    if any(tid)
        coe.(coe.arginList{tid})=varargin{i+1};
    end
end
% 获取版本信息
tver=version('-release');
verMatlab=str2double(tver(1:4))+(abs(tver(5))-abs('a'))/2;
if verMatlab<2017
    hold on
else
    hold(coe.ax,'on')
end
% 颜色计算
coe.CData=zeros(length(logoData.logoName),3);
for i=1:2:length(coe.Color)
    tLogo=coe.Color{i};
    for j=1:length(tLogo)
        tPos=find(logoData.logoName==tLogo(j));
        coe.CData(tPos,:)=coe.Color{i+1};
    end
end
% 统计基因出现次数
coe.Count=zeros(length(logoData.logoName),size(coe.Data,2));
for i=1:length(logoData.logoName)
    coe.Count(i,:)=sum(coe.Data==logoData.logoName(i),1);
end
% 开始绘图
if strcmpi(coe.Method,'Prob')
    coe.ax.YLim=[0,1];
    coe.ax.DataAspectRatio=[1 .2 1];
    coe.ax.YLabel.String='Probability';
else
    coe.ax.YLabel.String='Bits';
    if strcmpi(coe.Type,'NA')
        coe.ax.DataAspectRatio=[1 .4 1];
        coe.ax.YLim=[0,log(4)/log(2)];
    else
        coe.ax.DataAspectRatio=[1 .8 1];
        coe.ax.YLim=[0,log(20)/log(2)];
    end
end
coe.ax.XLim=[.5,size(coe.Data,2)+.5];
coe.ax.XTick=1:size(coe.Data,2);
coe.ax.LineWidth=1.2;
coe.ax.TickDir='out';
coe.ax.TickLength=[0.0020 0.0250];
coe.ax.FontSize=14;
coe.ax.YLabel.FontSize=16;
%coe.ax.LooseInset=[0,0,0,0];
fig=gcf;
fig.Units='normalized';
fig.Position=[0,0,1,1];
for i=1:size(coe.Count,2)
    tPos=find(coe.Count(:,i)>0);
    tCount=coe.Count(tPos,i)';
    tRatio=tCount./sum(tCount);
    if strcmpi(coe.Method,'Prob')
        maxH=1;
    else
        if strcmpi(coe.Type,'NA')
            maxH=log(4)/log(2);
        else
            maxH=log(20)/log(2);
        end
        maxH=maxH+sum(log(tRatio)./log(2).*tRatio);
    end
    tLen=tRatio.*maxH;
    [sortRatio,ind]=sort(tLen);
    cumsumSortRatio=[0,cumsum(sortRatio)];
    for j=1:length(sortRatio)
        tPic=logoData.logoPic.(logoData.logoName(tPos(ind(j))));
        tAlpha=double(255-tPic(:,:,1)./3-tPic(:,:,2)./3-tPic(:,:,3)./3)./255;
        tPic(:,:,1)=(255-tPic(:,:,1)).*coe.CData(tPos(ind(j)),1);
        tPic(:,:,2)=(255-tPic(:,:,2)).*coe.CData(tPos(ind(j)),2);
        tPic(:,:,3)=(255-tPic(:,:,3)).*coe.CData(tPos(ind(j)),3);
        image([i-.5,i+.5],[cumsumSortRatio(j),cumsumSortRatio(j+1)],tPic,'AlphaData',tAlpha,'AlphaDataMapping','scaled')
    end
end
% Zhaoxu Liu / slandarer (2023). sequence logos (序列logo图) 
% (https://www.mathworks.com/matlabcentral/fileexchange/123060-sequence-logos-logo), 
% MATLAB Central File Exchange. 检索来源 2023/1/10.
end

未经允许本代码请勿作商业用途,引用的话可以引用我file exchange上的链接,可使用如下格式:

Zhaoxu Liu / slandarer (2023). sequence logos (序列logo图) (https://www.mathworks.com/matlabcentral/fileexchange/123060-sequence-logos-logo), MATLAB Central File Exchange. 检索来源 2023/1/10.

若转载请保留以上file exchange链接及本文链接!!!!!

链接:
https://pan.baidu.com/s/1RMafcUm0NVyz6I0R93-DUw?pwd=slan
提取码:slan

matlab开发-读取和保存序列
08-27
matlab开发-读取和保存序列。此文件加载像并将其存储在工作目录中
生信绘:在线绘制 序列 Logo
最新发布
Ningbo_JiaYT的博客
12-16 4176
本文介绍通过 WebLogo网站 在线绘制 序列 Logo 序列分析)。
matlab_loglogplot
云在青天水在瓶
09-27 9158
使用 matlab loglog 画双对数坐标
MATLAB序列运算及绘制
aixdm的博客
07-09 6364
%绘制过程中细节操作 clear all;close all;clc; x=0:pi/100:2pi; y1=sin(x);y2=cos(x); plot(x,y1,’–k’,x,y2,’-.m’) %绘制形,设置颜色线型 title(‘sin(x),cos(x)曲线’) %名 xlabel(‘时间’) ylabel(‘幅值’) %轴名 text(x(180),y1(180),‘sinx’) text(5.2,0.4,‘cosx’)
matlab实心序列怎么画,如何在matlab中画出一确定序列的分布
weixin_42355666的博客
03-16 599
想在matlab中画出一确定序列的分布,并得到分布函数。用程序怎么实现啊? 急急急!O(∩_∩)O谢谢序列:0.0050.0060.0030.0010.0010.0060.0050.0030.0050.0020.0030.0050.0040.0060.0040.0050.0040.0020.0060.0050.0030.0040.0060.0040.0040.0030.0050.0050...
matlab时频_matlab时频绘制_matlab画时频_时频_
09-29
本教程将深入探讨如何使用MATLAB绘制时频,以及相关的概念和技术。 一、时频分析基础 时频分析允许我们观察信号在不同时间点上的频率成分,这在处理如语音、生物医学信号或工程领域的动态系统等瞬态信号时非常...
MATLAB|热力日历
11-07
3. **使用`heatmapcalendar`函数**:MATLAB的`heatmapcalendar`函数是专门用于绘制热力日历的。你可以传入日期和数据作为输入参数,该函数会自动处理并绘制形。例如: ```matlab dates = datetime({'2022-01...
基于matlab实现单位阶跃序列
06-02
% 绘制序列 title('单位阶跃序列示例'); xlabel('Time Index (n)'); ylabel('Step Sequence Value (u[n])'); ``` 在这个过程中,MATLAB的`for`循环和逻辑运算符`>=`被用来生成单位阶跃序列。当n小于1时,u[n]=0;...
MATLAB绘制干旱指数面积,matlab画区域降水,matlab
09-10
在提供的"MATLAB绘制干旱指数面积.docx"文档中,应包含了具体的操作步骤和MATLAB代码示例,读者可以参照这些内容实际操作。通过学习和实践,不仅可以加深对MATLAB编程的理解,还能掌握一种重要的气候数据分析方法...
plot_multichan.m:用于绘制多通道时间序列数据的简单 MATLAB 函数。-matlab开发
05-29
% 用于绘制多通道时间序列数据的简单 MATLAB 函数% % 用法: % plot_multichan( y ) % <- y: 信号% plot_multichan( x, y ) % <- x: 时间% % 例子: %y = randn([20,2000]); % plot_multichan(y); % ...
蛋白质分析工具:基于MATLAB的功能,这些将用于观察蛋白质过敏原的影响-matlab开发
05-29
有四种基于国际标准权重的蛋白质分析功能。 此外,还有一个测试程序,以便用户可以了解为他们的目的使用这些功能的过程。
matlab开发-蛋白质结构优化的基本和基本算法代码(使用格模型)
08-27
matlab开发-蛋白质结构优化的基本和基本算法代码(使用格模型)。可以直接运行的matlab代码,
Matlabloglog函数使用
热门推荐
jk_101的博客
05-14 1万+
loglog函数的功能是为双对数刻度
通过matlab序列写入cell中
fjswcjswzy的博客
06-07 1506
将一个序列写入cell中,要求cell中存放着的是每一帧片的名称,这里有一共725张视频帧,如下: 代码如下: img_path = 'C:/Users/Admin/Desktop/KCF-FOR-MATLAB/data/Benchmark/Basketball/img/'; D = dir([img_path, '*.jpg']); img_path_list = dir(strcat(img_path, '*.jpg')); % 获取该文件夹中所有jpg格式的像 img_num = len
学习MATLAB进阶(3)
Luohuasheng_的博客
12-22 1773
学习了统计画方法,绘画颜色填充和3维画
matlab:绘(2)
weixin_67370287的博客
11-26 4791
matlab绘制进阶操作
MATLAB合集: 双对数刻度 loglog
张哥频道:电生理信号和磁共振成像
10-28 5043
MATLABloglog双对数刻度绘
Matlab绘制形知识点总结(三)
FSHznb的博客
07-07 4212
本节matlab分享包括的知识点有semilog、contour、mesh、surf、plot3等绘函数的介绍及应用
Matlab基础知识六
qq_43436774的博客
10-30 1465
Matla学习笔记。 mesh和surf命令都可以绘出空间内的完整曲面,使用方法也类似,不同的是surf命令绘制得到的是着色的三维曲面(黑色线,彩色面);mesh命令绘制形是一个一排排的彩色曲线组成的网格(彩色线,白色面)。如果画的由非常紧密的’‘线条’‘构成的话,则surf画出的形就是黑色的,而mesh画出的形就是彩色的。
写文章

热门文章

  • 高质量论文配图配色(附RGB值及16进制码) 245305
  • c++链表(详解版) 218253
  • MATLAB 画一株会害羞的含羞草 84725
  • 分享 | 顶刊高质量论文插图配色(含RGB值及16进制HEX码)(第二期) 62815
  • MATLAB 3D玫瑰花绘制(内附旋转版本) 56140

分类专栏

  • 顶刊论文 1篇
  • cell 1篇
  • MATLAB 2篇
  • MATLAB 笔记 46篇
  • MATLAB 科学绘图 77篇
  • MATLAB 特效 35篇
  • MATLAB 游戏 35篇
  • App Designer 15篇
  • python 界面制作 3篇
  • R 统计分析 6篇

最新评论

  • MATLAB | 优化工具箱(optimization toolbox)改版后的live editor工具咋用

    几故.: 请问终止条件在哪设置。。

  • 我用 MATLAB 复刻了抖音爆火小游戏 苹果蛇

    Zlh6666666: 有点问题,当我们刷新的时候,蛇不会落在土块上,会自由下落

  • 教你用MATLAB制作一款最有中秋特色的饼状图——月饼状图

    Lvluking: imgSet alpSet函数咋用的呀

  • MATLAB | 全网唯一 MATLAB双向弦图(有向弦图)绘制

    reznov233: 请问CData对应的Clist规则是什么?我看您输入是一串序列不太理解意思

  • 无人机视角展示(无人机图像定位 )--某数学建模A题MATLAB代码

    .Augustine.: 支持大佬,原创不易,厉害!

最新文章

  • MATLAB | 中秋πlog,大家一起用MATLAB赏月叭
  • MATLAB | R2024b更新了哪些好玩的东西?
  • MATLAB | 绘图复刻(十七) | 半小提琴图
2024年21篇
2023年57篇
2022年100篇
2021年95篇
2020年49篇
2019年21篇

目录

目录

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

slandarer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王兰州知名的网站排优化网站江门网站推广优化公司推荐镇江网络营销网站优化网络推广黄山网站优化公司去哪找百度竞价包年推广网站引擎优化公司网站优化推广公司云南网站优化策划文山网站优化费用广西省网站排名怎么优化河南网站seo优化公司衡水网站建设优化排名虹口区百度网站优化价格兰州网站优化推广哪家好万州网站优化找谁湘潭网站优化哪家靠谱黄石企业网站优化日喀则网站搜索优化网站主题优化实验数据电商网站优化策略蚌埠网站关键词排名优化优化网站可以卖产品吗兰州省心快排优化网站极速网站优化深圳谷歌seo网站排名优化株洲关键词网站优化梅州网站优化作用哪个网站可以优化到首页seo网站优化视频教程赣州做网站优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化