2010-03-26 39 views
6

Tôi đang thực hiện một số lượng lớn seqlogos theo chương trình. Họ là hàng trăm cột rộng và do đó chạy một seqlogo thường tạo ra các chữ cái quá mỏng để xem. Tôi đã nhận thấy rằng tôi chỉ quan tâm đến một vài trong số các cột (không nhất thiết phải cột liên tiếp) ... nhất là tiếng ồn nhưng một số được bảo tồn cao.Thay đổi trục x của số liệu seqlogo trong MATLAB

tôi sử dụng một cái gì đó giống như đoạn này:

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)); 

Mặc dù khi tôi làm điều này tôi đã làm mất các thông tin về những cột dữ liệu đến từ đâu.

Thông thường tôi sẽ chỉ thay đổi trục x của seqlogo. Tuy nhiên, seqlogo là một số loại đối tượng dựa trên java điên và gọi như:

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

không hoạt động. Mọi sự trợ giúp sẽ rất được trân trọng.

Cảm ơn, Will

EDIT:

Trên bounty tôi sẵn sàng chấp nhận bất kỳ loại phương pháp điên cho việc thay đổi nhãn trục bao gồm (nhưng không giới hạn): Sử dụng xử lý hình ảnh hộp công cụ để sửa đổi hình ảnh sau khi lưu, tạo một hàm seqlogo mới bằng cách sử dụng hộp văn bản, sửa đổi mã java (nếu có thể), v.v. Tôi KHÔNG sẵn sàng chấp nhận những thứ như "sử dụng python", "sử dụng thư viện R này" hoặc bất kỳ loại khác của giải pháp không phải Matlab.

+0

@gnoice và @yuk Tôi đã lấy một phần câu trả lời của gnovice và một câu trả lời của gnovice. Tôi sử dụng phần "tạo thư" của yuk cho các phân đoạn hình ảnh ... vì đôi khi tôi làm AA và đôi khi NT quan trọng để có thể thực hiện điều này một cách nhanh chóng. Tuy nhiên, thay vì viết chúng vào các tập tin tôi chỉ lưu các hình ảnh trong một ô. Sau đó, tôi sử dụng phương pháp của gnovice viết các tập tin hình ảnh vào một ma trận hình ảnh khổng lồ ... mặc dù tôi sử dụng IMRESIZE để thay đổi kích thước hình ảnh. Câu trả lời cuối cùng của tôi là gần 50% mã từ mỗi cộng với một số phân tích cú pháp arg và kiểm tra. Tôi không chắc chắn làm thế nào để giải thưởng "danh tiếng", bất kỳ suy nghĩ bạn hai? – JudoWill

+0

Nếu bạn đang gặp khó khăn trong việc lựa chọn một, tôi cho rằng bạn chỉ có thể cho phép cộng đồng bỏ phiếu cho các câu trả lời trong một vài ngày, sau đó chọn phiếu bầu được bầu chọn cao nhất. Bạn * có thể * đăng giải pháp kết hợp của bạn như một câu trả lời vì lợi ích của sự hoàn chỉnh, nhưng bạn sẽ không thể tự thưởng cho mình * tiền thưởng cho nó (http://meta.stackexchange.com/questions/18841/lost- danh tiếng-sau-trả lời-của tôi-riêng-câu hỏi-với-bounty). – gnovice

+0

@gnovice: Đó là kế hoạch của tôi (cho cả giải thưởng và tính hoàn chỉnh) ... Tôi cũng đang tạo ra một giải pháp "tổng quát" hơn và đưa nó lên MathWorks FileExchange ... Tôi sẽ đảm bảo rằng tôi tham khảo bài đăng này:) – JudoWill

Trả lời

5

OK, tôi đã giết vài giờ với sự cố này. Có vẻ như bạn không thể đặt bất kỳ đối tượng MATLAB (trục hoặc hộp văn bản) nào trên đầu đối tượng hgjavacomponent đó. Và tôi không thể sửa đổi mã java, tất nhiên. Vì vậy, giải pháp khả thi duy nhất tôi tìm thấy là tạo ra hình từ đầu.

Tôi không muốn viết lại mã để tính toán ma trận trọng lượng (chiều cao biểu tượng), bạn đã làm điều đó. Nhưng nó có thể được thực hiện, nếu bạn không muốn sử dụng của seLABlogo MATLAB cả. Vì vậy, tôi đã thay đổi dòng cuối cùng của bạn một chút để có được ma trận:

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

Vấn đề với ký hiệu văn bản là bạn không thể kiểm soát chính xác kích thước của chúng, không thể phù hợp với ký hiệu hộp văn bản. Đây có lẽ là lý do tại sao MATLAB quyết định đi với đối tượng đồ họa java. Nhưng chúng ta có thể tạo ra các biểu tượng hình ảnh và đối phó với chúng.

Đây là mã để tạo ra hình ảnh của các chữ cái:

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 

Sau đó, chúng tôi sử dụng những hình ảnh để vẽ cốt truyện seqlogo mới:

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 

Dưới đây là kết quả: alt text http://img716.imageshack.us/img716/2073/seqlogoexample.png

Các mã và con số có thể được cải thiện hơn nữa, tất nhiên, nhưng tôi hy vọng đây là một cái gì đó bạn có thể bắt đầu làm việc với. Hãy cho tôi biết nếu tôi bỏ lỡ một cái gì đó.

+0

trông tuyệt vời ... Tôi đã chơi xung quanh với một phương pháp để sử dụng hộp văn bản nhưng có một số vấn đề tôi chắc chắn u nhận thấy, bạn không thể cho một lá thư để chiếm toàn bộ hộp. Tôi sẽ chơi với nó trong vài phút để đảm bảo nó hoạt động ... Tôi có thể chơi đùa với nó để loại bỏ việc viết tạm thời các chữ cái, nhưng đó chỉ là sở thích cá nhân. TUYỆT VỜI TUYỆT VỜI – JudoWill

+0

Làm hình ảnh từ văn bản và sau đó đặt chúng: Ngọt. +1 Tôi gần như xin lỗi vì tôi thích cách tiếp cận gnovices tốt hơn nữa. – Jonas

1

Về trục x, có vẻ như con số này không chứa trục tiêu chuẩn (findobj(handle,'type','axes') là trống), chứ không phải một đối tượng tùy chỉnh của lớp com.mathworks.toolbox.bioinfo.sequence.SequenceLogo ...

Trên một lưu ý không liên quan, bạn có thể thay dòng đầu tiên của bạn với một cuộc gọi đơn giản hơn:

wide_seqs = reshape(randseq(200*500),[],200); 
+0

hữu ích nhưng không thực sự trả lời câu hỏi. – JudoWill

0

Nếu các trục là một đối tượng java, sau đó bạn có thể muốn có một cái nhìn tại các phương pháp và các thuộc tính với uiinspect. Điều này có thể cung cấp cho bạn một ý tưởng những gì bạn nên chỉnh sửa để có được hành vi bạn muốn (không may, tôi không có hộp công cụ, vì vậy tôi không thể tìm kiếm nó cho bạn).

+0

Tôi đã xem xét đối tượng với uiinspect ... Đối tượng java rất thưa thớt và dường như không có bất kỳ điều gì liên quan đến trục. Tôi đã gửi một vé hỗ trợ cho Mathworks, có thể tôi sẽ gặp may mắn. – JudoWill

4

Tôi đã gặp phải sự cố tương tự yuk did cố gắng sửa đổi hình từ SEQLOGO, vì vậy đây là nỗ lực của tôi ở phiên bản của riêng tôi để bắt chước giao diện của nó. Đó là hàm seqlogo_new.m mà bạn đưa ra hai đối số: chuỗi của bạn và giá trị bit tối thiểu tùy chọn. Nó đòi hỏi một tập tin hình ảnh ACGT.jpg có thể được tìm thấy at this link.

Dưới đây là các mã cho các chức năng:

function hFigure = seqlogo_new(S,minBits) 
%# SEQLOGO_NEW Displays sequence logos for DNA. 
%# HFIGURE = SEQLOGO_NEW(SEQS,MINBITS) displays the 
%# sequence logo for a set of aligned sequences SEQS, 
%# showing only those columns containing at least one 
%# nucleotide with a minimum bit value MINBITS. The 
%# MINBITS parameter is optional. SEQLOGO_NEW returns 
%# a handle to the rendered figure HFIGURE. 
%# 
%# SEQLOGO_NEW calls SEQLOGO to perform some of the 
%# computations, so to use this function you will need 
%# access to the Bioinformatics Toolbox. 
%# 
%# See also seqlogo. 

%# Author: Ken Eaton 
%# Version: MATLAB R2009a 
%# Last modified: 3/30/10 
%#--------------------------------------------------------- 

    %# Get the weight matrix from SEQLOGO: 

    W = seqlogo(S,'DisplayLogo',false); 
    bitValues = W{2}; 

    %# Select columns with a minimum bit value: 

    if nargin > 1 
    highBitCols = any(bitValues > minBits,1); %# Plot only high-bit columns 
    bitValues = bitValues(:,highBitCols); 
    else 
    highBitCols = true(1,size(bitValues,2)); %# Plot all columns 
    end 

    %# Sort the bit value data: 

    [bitValues,charIndex] = sort(bitValues,'descend'); %# Sort the columns 
    nSequence = size(bitValues,2);      %# Number of sequences 
    maxBits = ceil(max(bitValues(:)));     %# Upper plot limit 

    %# Break 4-letter image into a 1-by-4 cell array of images: 

    imgACGT = imread('ACGT.jpg');    %# Image of 4 letters 
    [nRows,nCols,nPages] = size(imgACGT);  %# Raw image size 
    letterIndex = round(linspace(1,nCols+1,5)); %# Indices of letter tile edges 
    letterImages = {imgACGT(:,letterIndex(1):letterIndex(2)-1,:), ... 
        imgACGT(:,letterIndex(2):letterIndex(3)-1,:), ... 
        imgACGT(:,letterIndex(3):letterIndex(4)-1,:), ... 
        imgACGT(:,letterIndex(4):letterIndex(5)-1,:)}; 

    %# Create the image texture map: 

    blankImage = repmat(uint8(255),[nRows round(nCols/4) 3]); %# White image 
    fullImage = repmat({blankImage},4,2*nSequence-1); %# Cell array of images 
    fullImage(:,1:2:end) = letterImages(charIndex); %# Add letter images 
    fullImage = cat(1,cat(2,fullImage{1,:}),...  %# Collapse cell array 
        cat(2,fullImage{2,:}),...  %# to one 3-D image 
        cat(2,fullImage{3,:}),... 
        cat(2,fullImage{4,:})); 

    %# Initialize coordinates for the texture-mapped surface: 

    X = [(1:nSequence)-0.375; (1:nSequence)+0.375]; 
    X = repmat(X(:)',5,1);  %'# Surface x coordinates 
    Y = [zeros(1,nSequence); cumsum(flipud(bitValues))]; 
    Y = kron(flipud(Y),[1 1]); %# Surface y coordinates 
    Z = zeros(5,2*nSequence); %# Surface z coordinates 

    %# Render the figure: 

    figureSize = [602 402];     %# Figure size 
    screenSize = get(0,'ScreenSize');   %# Screen size 
    offset = (screenSize(3:4)-figureSize)/2; %# Offset to center figure 
    hFigure = figure('Units','pixels',... 
        'Position',[offset figureSize],... 
        'Color',[1 1 1],... 
        'Name','Sequence Logo',... 
        'NumberTitle','off'); 
    axes('Parent',hFigure,... 
     'Units','pixels',... 
     'Position',[60 100 450 245],... 
     'FontWeight','bold',... 
     'LineWidth',3,... 
     'TickDir','out',... 
     'XLim',[0.5 nSequence+0.5],... 
     'XTick',1:nSequence,... 
     'XTickLabel',num2str(find(highBitCols)'),... %' 
     'YLim',[-0.03 maxBits],... 
     'YTick',0:maxBits); 
    xlabel('Sequence Position'); 
    ylabel('Bits'); 
    surface(X,Y,Z,fullImage,... 
      'FaceColor','texturemap',... 
      'EdgeColor','none'); 
    view(2); 

end 

Và dưới đây là một vài ví dụ về việc sử dụng của nó:

S = ['ATTATAGCAAACTA'; ... %# Sample data 
    'AACATGCCAAAGTA'; ... 
    'ATCATGCAAAAGGA']; 
seqlogo_new(S);    %# A normal plot similar to SEQLOGO 

alt text

seqlogo_new(S,1);  %# Plot only columns with bits > 1 

alt text

+0

điều tốt đẹp về câu trả lời này là bạn thực sự có thể sử dụng điều này như một con số "bình thường" ... bạn có thể sử dụng nó như một subplot hoặc đặt nó vào một đối tượng trục tùy ý. Với câu trả lời của yuk, vì anh ta đặt các đối tượng trục theo cách thủ công, nó không thể thay đổi kích thước. – JudoWill

+0

@JudoWill: Tôi đã thực hiện một cách tiếp cận phi truyền thống bằng cách làm cho tất cả các phần chữ được hiển thị của một hình ảnh lớn được vẽ bản đồ lên bề mặt để kéo giãn chúng khi cần. Điều này cho phép tôi chỉ có 1 bộ trục, nhưng có lẽ hơi khó để làm theo những gì mã đang làm. ;) Cách tiếp cận khác (loại trung gian giữa câu trả lời của yuk và của tôi) là vẽ từng chữ cái làm đối tượng hình ảnh của riêng nó trong một bộ trục, mà * có thể * hiệu quả đồ họa hơn những gì tôi làm ở trên. – gnovice

+0

Tôi thích cái này hơn cả yuk. +1 – Jonas

3

Vì vậy, tôi đã tạo ra một giải pháp khác bằng cách sử dụng các phần của cả giải pháp yuk và gnovice. Khi tôi chơi xung quanh với các giải pháp tôi nhận ra tôi thực sự muốn có thể sử dụng đầu ra là "subplots" và có thể thay đổi màu sắc của các chữ cái tùy ý.

Vì yuk sử dụng các đối tượng trục được đặt chương trình với chữ nhúng nó sẽ rất khó chịu (mặc dù không thể) để sửa đổi mã của mình thành ô đối tượng trục tùy ý. Kể từ khi giải pháp của gnovice đọc các chữ cái từ một tập tin được tạo trước nó sẽ có khó khăn để sửa đổi mã để chạy chống lại các chương trình màu tùy ý hoặc lựa chọn thư. Vì vậy, giải pháp của tôi sử dụng mã "tạo thư" từ giải pháp của yuk và phương pháp "siêu hình ảnh" từ giải pháp của gnovice.

Ngoài ra còn có một số lượng đáng kể phân tích đối số và kiểm tra. Dưới đây là giải pháp kết hợp của tôi ... Tôi chỉ bao gồm nó để hoàn thành, tôi rõ ràng không thể giành chiến thắng tiền thưởng của riêng tôi. Tôi sẽ để cho cộng đồng quyết định giải thưởng và trao tiền thưởng cho bất cứ ai có xếp hạng cao nhất vào cuối thời hạn ... trong trường hợp hòa tôi sẽ đưa nó cho người có người đại diện thấp nhất (họ có lẽ "cần" nó nhiều hơn).

function [npos, handle] = SeqLogoFig(SEQ, varargin) 
% SeqLogoFig 
%  A function which wraps around the bioinformatics SeqLogo command 
%  and creates a figure which is actually a MATLAB figure. All 
%  agruements for SEQLOGO are passed along to the seqlogo calculation. 
%  It also supports extra arguements for plotting. 
% 
% [npos, handle] = SeqLogoFig(SEQ); 
% 
%  SEQ    A multialigned set of sequences that is acceptable 
%      to SEQLOGO. 
%  npos   The positions that were actually plotted 
%  handle   An axis handle to the object that was plotted. 
% 
% Extra Arguements: 
%  
%  'CUTOFF'  A bit-cutoff to use for deciding which columns to 
%      plot. Any columns that have a MAX value which is 
%      greater than CUTOFF will be provided. Defaults to 
%      1.25 for NT and 2.25 for AA. 
% 
%  'TOP-N'   Plots only the top N columns as ranked by thier MAX 
%      bit conservation. 
% 
%  'AXES_HANDLE' An axis handle to plot the seqlogo into. 
%  
%  'INDS'   A set of indices to to plot. This overrides any 
%      CUTOFF or TOP-N that were provided 
% 
% 
% 
% 

%% Parse the input arguements 
ALPHA = 'nt'; 
MAX_BITS = 2.5; 
RES = [200 80]; 
CUTOFF = []; 
TOPN = []; 
rm_inds = []; 
colors = []; 
handle = []; 
npos = []; 


for i = 1:2:length(varargin) 
    if strcmpi(varargin{i}, 'alphabet') 
     ALPHA = varargin{i+1}; 

    elseif strcmpi(varargin{i}, 'cutoff') 
     CUTOFF = varargin{i+1}; 
     %we need to remove these so seqlogo doesn't get confused 
     rm_inds = [rm_inds i, i+1]; %#ok<*AGROW> 

    elseif strcmpi(varargin{i}, 'colors') 
     colors = varargin{i+1}; 
     rm_inds = [rm_inds i, i+1]; 
    elseif strcmpi(varargin{i}, 'axes_handle') 
     handle = varargin{i+1}; 
     rm_inds = [rm_inds i, i+1]; 
    elseif strcmpi(varargin{i}, 'top-n') 
     TOPN = varargin{i+1}; 
     rm_inds = [rm_inds i, i+1]; 
    elseif strcmpi(varargin{i}, 'inds') 
     npos = varargin{i+1}; 
     rm_inds = [rm_inds i, i+1]; 
    end 
end 

if ~isempty(rm_inds) 
    varargin(rm_inds) = []; 
end 

if isempty(colors) 
    colors = GetColors(ALPHA); 
end 

if strcmpi(ALPHA, 'nt') 
    MAX_BITS = 2.5; 
elseif strcmpi(ALPHA, 'aa') 
    MAX_BITS = 4.5; 
end 

if isempty(CUTOFF) 
    CUTOFF = 0.5*MAX_BITS; 
end 


%% Calculate the actual seqlogo. 
wm = seqlogo(SEQ, varargin{:}, 'displaylogo', false); 


%% Generate the letters 
letters = wm{1}; 
letter_wins = cell(size(letters)); 
[~, loc] = ismember(letters, colors(:,1)); 
loc(loc == 0) = size(colors,1); 
clr = cell2mat(colors(loc, 2)); % 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 
    letter_wins{t} = reshape(img(repmat(m,[1 1 3])),[sum(any(m,2)) sum(any(m,1)) 3]); 
    close(hf); 
end 


%% Use the letters to generate a figure 

%create a "image" that will hold the final data 
wmat = wm{2}; 
if isempty(npos) 
    if isempty(TOPN) 
     npos = find(any(wmat>CUTOFF,1)); 
    else 
     [~, i] = sort(max(wmat,[],1), 'descend'); 
     npos = sort(i(1:TOPN)); 
    end 
end 

fig_data = 255*ones(RES(1), RES(2)*(length(npos)+1)+length(npos)*2,3); 
bitscores = linspace(0, MAX_BITS, size(fig_data,1)); 
tick_pos = zeros(length(npos),1); 
% place images of letters 
for i=1:length(npos) 
    [wms idx] = sort(wmat(:,npos(i)), 'descend'); % largest on the top 
    bits = [flipud(cumsum(flipud(wms))); 0]; 
    let_data = letter_wins(idx(wms>0)); 
    for s=1:length(let_data) 
     start_pos = find(bitscores>=bits(s),1); 
     end_pos = find(bitscores<=bits(s+1),1, 'last'); 
     if isempty(start_pos) || isempty(end_pos) || end_pos > start_pos 
      continue 
     end 
     img_win = imresize(let_data{s}, [start_pos-end_pos, RES(2)]); 

     fig_data(start_pos-1:-1:end_pos, (i*RES(2)-RES(2)*.5:i*RES(2)+RES(2)*.5-1)+2*i,:) = img_win; 
    end 
    tick_pos(i) = i*RES(2)+2*i; 
end 
if ~isempty(handle) 
    image(handle,[0 size(fig_data,2)], [0 MAX_BITS],fig_data./255) 
else 
    handle = image([0 size(fig_data,2)], [0 MAX_BITS],fig_data./255); 
end 
set(gca, 'ydir', 'normal', 'xtick', tick_pos, ... 
     'userdata', tick_pos, 'xticklabel', npos); 
xlabel('position') 
ylabel('bits') 


function colors = GetColors(alpha) 
% get the standard colors for the sequence logo 
if strcmpi(alpha, 'nt') 
    colors = cell(6,2); 
    colors(1,:) = {'A', [0 1 0]}; 
    colors(2,:) = {'C', [0 0 1]}; 
    colors(3,:) = {'G', [1 1 0]}; 
    colors(4,:) = {'T', [1 0 0]}; 
    colors(5,:) = {'U', [1 0 0]}; 
    colors(6,:) = {'', [1 0 1]}; 
elseif strcmpi(alpha, 'aa') 
    colors = cell(21,2); 
    colors(1,:) = {'G', [0 1 0]}; 
    colors(2,:) = {'S', [0 1 0]}; 
    colors(3,:) = {'T', [0 1 0]}; 
    colors(4,:) = {'Y', [0 1 0]}; 
    colors(5,:) = {'C', [0 1 0]}; 
    colors(6,:) = {'Q', [0 1 0]}; 
    colors(7,:) = {'N', [0 1 0]}; 
    colors(8,:) = {'A', [1 165/255 0]}; 
    colors(9,:) = {'V', [1 165/255 0]}; 
    colors(10,:) = {'L', [1 165/255 0]}; 
    colors(11,:) = {'I', [1 165/255 0]}; 
    colors(12,:) = {'P', [1 165/255 0]}; 
    colors(13,:) = {'W', [1 165/255 0]}; 
    colors(14,:) = {'F', [1 165/255 0]}; 
    colors(15,:) = {'M', [1 165/255 0]}; 
    colors(16,:) = {'D', [1 0 0]}; 
    colors(17,:) = {'E', [1 0 0]}; 
    colors(18,:) = {'K', [0 0 1]}; 
    colors(19,:) = {'R', [0 0 1]}; 
    colors(20,:) = {'H', [0 0 1]}; 
    colors(21,:) = {'', [210/255 180/255 140/255]}; 
else 
    error('SeqLogoFigure:BADALPHA', ... 
      'An unknown alphabet was provided: %s', alpha) 
end 

Tôi đã gửi tệp này đến Mathworks FileExchange ... khi được phê duyệt, tôi sẽ đăng liên kết.

Nỗi phiền toái dai dẳng duy nhất mà tôi có là vì nó tạo ra hình ảnh chữ, nó hiển thị các cửa sổ hình nhỏ với tốc độ nhanh. Nếu có ai biết một mẹo có thể tránh được thì tôi rất muốn nghe nó.

EDIT: Mathworks đã phê duyệt tệp đã gửi của tôi ...bạn có thể tải xuống tại FileExchange tại đây: http://www.mathworks.com/matlabcentral/fileexchange/27124

+0

@JudoWill: Rất đẹp. Đối với việc giữ các cửa sổ con số nhỏ xuất hiện, tôi nghĩ bạn chỉ có thể đặt thuộc tính ''Có thể nhìn thấy' 'của các cửa sổ hình thành' 'tắt' 'khi bạn tạo chúng. – gnovice

+1

@gnovice: Nếu tôi nhớ lại chính xác, getframe yêu cầu con số hiển thị[email protected]: Nó có thể là một ý tưởng tốt để lưu các chữ cái vào đĩa, do đó, các con số flash chỉ lần đầu tiên các chữ cái cụ thể đang được tạo ra. – Jonas

+0

@ Jonas: Bạn có thể đúng. Tôi nghĩ rằng họ cần phải nói rõ ràng trong tài liệu, vì tôi chỉ thấy đề cập đến các máy tính để bàn ảo không hiển thị như trái ngược với các hình không nhìn thấy được. – gnovice

Các vấn đề liên quan