Как построить функцию с разным цветом для разных интервалов? - PullRequest
3 голосов
/ 10 октября 2011

У меня есть типичный сценарий, в котором есть Вектор X и Вектор Y . Вектор X содержит растущие значения, например X = [1 1 1 2 2 3 4 4 4 4 4]. Вектор Y содержит реальные значения того же размера, что и X. Я ищу график Индекс против Y с изменением цвета для каждого другого значения X для соответствующего индекса.

Например, график должен иметь color1 для первых 3 значений 1, color2 для следующих 2 значений 2, color3 для 1 значения 3 и т. Д.

Может ли кто-нибудь помочь мне

Ответы [ 2 ]

4 голосов
/ 10 октября 2011

Опираясь на Ответ Лорана и реализуя ваше требование " Index против Y ",

function color_plot(data_vector, color_vector)
styles={'ro','g.','bx','kd'};
hold off;
for i=unique(color_vector)
    thisIdx=find(color_vector==i);
    thisY=data_vector(color_vector==i);
    thisStyle=styles{mod(i-1,numel(styles))+1}; 
    plot(thisIdx,thisY,thisStyle);
    hold on;
end
hold off;

Моя версия также допускает произвольно большие цветовые индексы; если у вас недостаточно определенных стилей, он просто оборачивается и повторно использует цвета.

Обновление примечание Мне пришлось исправить знак выше в расчете о thisStyle.

Тестирование с помощью

X = [1 1 1 2 2 3 4 4 4 4 4];
Y=rand(size(X))
color_plot(Y,X)

теперь дает

enter image description here

3 голосов
/ 10 октября 2011

A plot() опция функции была бы лучше (и, возможно, она существует).

Вот обходная функция, чтобы сделать это:

function colorPlot( data_vector, colors_vector)
%PLOTCOL plots data_vector with colors found in colors_vector

Styles=[{'r-'} {'g-'} {'b-'} {'k-'}];


last_off=0;
last_data=0;
for i=unique(colors_vector)
    data_segment=data_vector(colors_vector==i);
    len=length(data_segment);
    if last_off==0
        hold off;
        plot( data_segment, 1:len,char(Styles(i)));
        last_off=len;
    else
        plot([last_data data_segment],last_off:last_off+len,char(Styles(i)));
        last_off=last_off+len;
    end
    last_data=data_segment(len);
    hold on;
end
hold off;
end

Назовите это так:

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