如何在不同的时间间隔内绘制不同颜色的功能?

时间:2011-10-10 07:08:31

标签: matlab plot

我有一个典型的场景,其中有一个向量 X 和向量 Y 。向量X包含递增值,例如X = [1 1 1 2 2 3 4 4 4 4 4]。矢量Y包含与X相同大小的实数值。我希望绘制索引Vs Y ,并为相应索引的每个不同X值绘制颜色。

例如,对于前3个值1,绘图应该有color1,对于接下来的2个值2,color3应该有color2,对于1个值3,color3应该有颜色3,等等。

任何人都可以帮助我

2 个答案:

答案 0 :(得分:4)

Laurent's answer为基础并实施“索引与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

答案 1 :(得分:3)

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