Как добавить линии, соединяющие соответствующие поля, которые я нарисовал на графике?(MATLAB) - PullRequest
0 голосов
/ 26 августа 2011

У меня есть матрица (Данные), которая выглядит следующим образом:

(начало) (остановка) (цепь) (номер гена)

    [      1     29           1        1]
    [     32     38           1        1]
    [     44     60           1        1]
    [     66     70           0        2]
    [     75     80           0        2]
    [     81     88           0        3]
    [     99    102           0        3]
    [    111    160           0        3]
    [    166    170           1        4]
    [    171    188           1        4]

, которые я нанес на графикиспользуя первые два столбца в качестве позиций X и заданной позиции Y.Это код, который у меня есть до сих пор:

if nargin<4, strands = 0; end;
if nargin<3, height = 0.1; end;
if nargin<2, y = 2.1; end;

    for k=1:size(cds,1),
        xc = [cds(k,1) cds(k,2) cds(k,2) cds(k,1)];
        if strands,
            if cds(k,3), % minus strand
                yc = [y y y-height/2 y-height/2];
                c = 'r';
            else % plus strand
                yc = [y+height/2 y+height/2 y y];
                c = 'b';
            end
        else
            yc = [y+height/2 y+height/2 y-height/2 y-height/2];
            c = 'b';
        end
        h(k) = patch(xc,yc,c);
    end

Я пытаюсь добавить строки под каждым «ящиком», который соответствует номеру гена (4-й столбец матрицы данных).Как бы я поступил так с функцией plot?

1 Ответ

1 голос
/ 26 августа 2011

Из вашего вопроса непонятно, как вы хотите, чтобы линии указывали номера генов, я предполагаю, что вы хотите разные цвета для каждого типа.Вот как бы я это сделал:

cds = [
    1     29           1        1
    32     38           1        1
    44     60           1        1
    66     70           0        2
    75     80           0        2
    81     88           0        3
    99    102           0        3
    111    160           0        3
    166    170           1        4
    171    188           1        4
];

strands = 0;
height = 0.1;
y = 2.1;

[g,gIdx,gNum] = unique(cds(:,4));
clr = 'gcmykrb';

for k=1:size(cds,1),
    xc = [cds(k,1) cds(k,2) cds(k,2) cds(k,1)];
    if strands,
        if cds(k,3), % minus strand
            yc = [y y y-height/2 y-height/2];
            c = 'r';
        else % plus strand
            yc = [y+height/2 y+height/2 y y];
            c = 'b';
        end
    else
        yc = [y+height/2 y+height/2 y-height/2 y-height/2];
        c = 'b';
    end
    h(k) = patch(xc,yc,c);

    hLine(k) = line([cds(k,1) cds(k,2)], [y-3*height/4 y-3*height/4], ...
        'LineWidth',5, 'Color',clr(gNum(k)));
end
legend(hLine(gIdx), num2str(g), 'Orientation','horizontal')

screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...