在 MATLAB 中更改 seqlogo 图形的 x 轴

2024-02-21

我正在制作大量seqlogos http://www.mathworks.com/access/helpdesk/help/toolbox/bioinfo/ref/seqlogo.html以编程方式。它们有数百列宽,因此运行seqlogo通常会创建太薄而看不清的字母。我注意到我只关心其中的一些列(不一定是连续的列)......大多数都是噪音,但有些是高度保守的。

我使用类似这个片段的东西:

wide_seqs = cell2mat(arrayfun(@randseq, repmat(200, [500 1]), 'uniformoutput', false));
wide_seqs(:, [17,30, 55,70,130]) = repmat(['ATCGG'], [500 1])

conserve_cell = seqlogo(wide_seqs, 'displaylogo', false);
high_bit_cols = any(conserve_cell{2}>1.0,1);
[~, handle] = seqlogo(wide_seqs(:,high_bit_cols ));

尽管当我这样做时,我丢失了有关数据来自哪些列的信息。

通常我只会改变 x 轴seqlogo。然而,seqlogo是某种疯狂的基于 java 的对象,调用如下:

set(handle, 'xticklabel', num2str(find(high_bit_cols)))

不工作。任何帮助将不胜感激。

谢谢, 将要

EDIT:

在赏金上,我愿意接受任何类型的更改轴标签的疯狂方法,包括(但不限于):使用图像处理工具箱在保存后修改图像,使用文本框创建新的 seqlogo 函数,修改java代码(如果可能的话)等。我不愿意接受诸如“使用python”、“使用这个R库”或任何其他类型的非Matlab解决方案之类的东西。


好吧,我因为这个问题浪费了几个小时。看来您无法将任何 MATLAB 对象(轴或文本框)放置在该 hgjavacomponent 对象的顶部。当然,我无法修改java代码。所以我找到的唯一可行的解​​决方案是从头开始创建图形。

我不想重写代码来计算权重矩阵(符号高度),你已经这样做了。但如果您根本不想使用 MATLAB 的 seqlogo,这是可以做到的。所以我稍微改变了你的最后一行以获得矩阵:

[wm, handle] = seqlogo(wide_seqs(:,high_bit_cols ));

文本符号的问题是您无法精确控制它们的大小,无法将符号适合文本框。这可能就是 MATLAB 决定使用 java 图形对象的原因。但我们可以创建符号图像并处理它们。

以下是创建字母图像的代码:

letters = wm{1};
clr = [0 1 0; 0 0 1; 1 0.8 0;1 0 0]; % corresponding colors
for t = 1:numel(letters)
    hf = figure('position',[200 200 100 110],'color','w');
    ha = axes('parent',hf, 'visible','off','position',[0 0 1 1]);
    ht = text(50,55,letters(t),'color',clr(t,:),'units','pixels',...
        'fontsize',100,'fontweight','norm',...
        'vertical','mid','horizontal','center');
    F = getframe(hf); % rasterize the letter
    img = F.cdata;
    m = any(img < 255,3); % convert to binary image
    m(any(m,2),any(m,1))=1; % mask to cut white borders
    imwrite(reshape(img(repmat(m,[1 1 3])),[sum(any(m,2)) sum(any(m,1)) 3]),...
        [letters(t) '.png'])
    close(hf)
end

然后我们使用这些图像绘制新的 seqlogo 图:

xlabels = cellstr(num2str(find(high_bit_cols)'));
letters = wm{1};
wmat=wm{2}; % weight matrix from seqlogo
[nletters  npos] = size(wmat);
wmat(wmat<0) = 0; % cut negative values

% prepare the figure
clf
hAx = axes('parent',gcf,'visible','on');
set(hAx,'XLim',[0.5 npos+0.5],'XTick',1:npos,'XTickLabel',xlabels)
ymax = ceil(max(sum(wmat)));
ylim([0 ymax])
axpos = get(hAx,'Position');
step = axpos(3)/npos;

% place images of letters
for i=1:npos
    [wms idx] = sort(wmat(:,i)); % largest on the top
    let_show = letters(idx);
    ybot = axpos(2);
    for s=1:nletters
        if wms(s)==0, continue, end;
        axes('position',[axpos(1) ybot step wms(s)/ymax*axpos(4)])
        ybot = ybot + wms(s)/ymax*axpos(4);
        img = imread([let_show(s) '.png']);
        image(img)
        set(gca,'visible','off')
    end
    axpos(1)=axpos(1)+step;
end

结果如下:替代文本 http://img716.imageshack.us/img716/2073/seqlogoexample.png http://img716.imageshack.us/img716/2073/seqlogoexample.png

当然,代码和图形还可以进一步改进,但我希望这是您可以开始使用的东西。如果我错过了什么,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MATLAB 中更改 seqlogo 图形的 x 轴 的相关文章

随机推荐

  • 如何从metrics-server获取Pod CPU和内存使用情况?

    我目前在 K8s 集群中安装并运行了指标服务器 利用 kubernetes python 库 我可以发出此请求来获取 pod 指标 from kubernetes import client api client client ApiCli
  • 没有默认构造函数?

    include
  • 如何防止 Visual Studio 在 Web 项目中“发布”XML 文档文件?

    Note 这个问题类似于如何防止在发布模式构建中复制 XML 文档文件 https stackoverflow com questions 3980958 how to prevent the copy of xml documentati
  • 对分组表进行数学运算

    我的问题不在于真正的编程语言 我有一个 ABAP 语言练习 但该语言不是很重要 无论如何 我有一张桌子 我需要计算该职位的总成本 显然是在选择之后 然后 该表将按两个字段 MATNR 和 BUKRS 进行分组 因此我需要知道每个组的头寸总成
  • Dart JsonSerialized 与抽象类

    我正在尝试为一个对象生成 json 辅助函数 该函数包含一个具有抽象类类型的列表 如下所示 import package json annotation json annotation dart import exercise variat
  • 数据库设计 - 两个项目应该共享同一个表吗?

    背景 同时设计的两个项目 A B 都需要一个新表 称为DocumentStore 在 postgres 下存储文档 文件 但是项目 A 和 B 之间围绕文档存储的业务逻辑是不同的 这意味着围绕文档存储的关系DocumentStoreA 和
  • java.lang.RuntimeException 找不到 FacesContext

    我不知道如何继续 但我的新 JSF 1 2 Web 应用程序总是收到 java lang RuntimeException 找不到 FacesContext 我确信这只是我找不到的一些配置 异常发生在第一个f or h 标签 已经有了重要的
  • korn 和 bash shell 之间的区别[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对 Unix 完全陌生 目前 我被要求了解这两个方面康壳 ksh and bash shell 有人可以给我简要介绍一下这两者吗 是这个
  • Camera2cameraManager.openCamera在某些设备上有时会出现异常

    我有一个录制视频的应用程序 目前安装量约为 80K 超过 100K 下载量 Crashlytics 统计数据似乎不错 无崩溃用户 99 66 Google Play 上的评分也不错 4 5 但对于我的一些用户来说 仍然可能会发生下一个错误
  • 如何让 SwiftUI 的 .onContinueUserActivity 工作

    我很好奇 有没有人设法让 SwiftUI 的 onContinueUserActivity 工作 看着来自苹果的示例代码 https developer apple com documentation swiftui restoring y
  • 实体对象不能被 IEntityChangeTracker 的多个实例引用

    我使用 EF 作为 ORM 我处置objectContext根据每一个要求 我将实体保存在缓存层中 因为我的服务获得大量流量 我有时会收到错误objectContext already disposed对于我从缓存中获取的一些实体 我已将此
  • ## 预处理器运算符有哪些应用以及需要考虑的问题?

    正如我之前的许多问题中提到的 我正在使用 K R 目前正在使用预处理器 更有趣的事情之一是我之前学习 C 的尝试中从未了解过的事情 预处理器运算符 根据 K R 的说法 预处理器运算符 提供了一种连接实际的方法 宏展开期间的参数 如果一个
  • 组件返回失败代码:0x80004005

    仅当我执行此操作时 有时才会触发此错误XMLHttpRequest uncaught exception Exception Component returned failure code 0x80004005 NS ERROR FAILU
  • Ruby - 是否可以将方法别名为安全导航运算符

    Ruby 2 3 引入了安全导航运算符 但我发现它的语法过于离散 在简单扫描代码时很容易错过 相反 我更喜欢以下语法try因为它看起来更加明显和有意 所以我的问题是在 Ruby 2 3 中 有没有办法为安全导航运算符添加别名或猴子修补方法
  • 从Python调用Matlab函数

    我有一个项目 其中有一个一个 matlab 代码 我必须运行 Django 我尝试安装 Mlabwrap 但它给了我以下错误 Traceback most recent call last File
  • 应用程序不再可用

    在移动设备上安装应用程序后 并将设备时间更改为一周前 并尝试打开应用程序它说 MyAppName Is No Longer Available 任何遇到此问题的人请告诉我 您的意见非常重要 我们有很多理由这样做 如果您没有有效的开发者许可证
  • 使用 tweepy 保存推文全文

    我是一个Python新手程序员 我在尝试使用以下命令提取一系列推文的文本时遇到问题tweepy并将其保存到文本文件 我省略了身份验证和其他内容 search api search hello count 10 textlist for i
  • 解析本地HTML文件

    我可以使用 PowerShell 解析 HTML 页面 PS gt foo Invoke WebRequest http example com PS gt foo Links Count 1 但是 如果我下载该页面 PS gt Invok
  • 结构错误中的联合

    我有以下结构 struct type1 struct type2 node union element struct type3 e int val 初始化指针时 f指向一个实例type1并做类似的事情 f element gt e甚至只是
  • 在 MATLAB 中更改 seqlogo 图形的 x 轴

    我正在制作大量seqlogos http www mathworks com access helpdesk help toolbox bioinfo ref seqlogo html以编程方式 它们有数百列宽 因此运行seqlogo通常会