在MATLAB中根据条件改变图形点的颜色

时间:2014-04-03 06:57:21

标签: matlab matrix graph plot

我有MFCC特征矩阵" ceps",并且假设20点的数组如下,

 sp=[200 400 500 ........7568]

我希望在两个段之间进行比较,例如:)比较1到200(一个段)和200到400(第二段)的要素数据值。比较工作的价值将是负数或正数....我已将所有这些值存储在一个向量

a=zeros((length(sp)-1),1)
a=a';
cont=0;
for i=1:length(sp)-1
cont=cont+1;

if cont==1
ceps1=ceps(:,1:sp(i));
obj=gm.distribution.fit(ceps1',1,'options',options);
y=-obj.NlogL;

else
ceps1=ceps(:,sp(i):sp(i+1));
obj=gm.distribution.fit(ceps1',1,'options',options);
y=-obj.NlogL;

end

ceps2=ceps(:,sp(i):sp(i+1));
[m n]=size(ceps2');
y1=-obj.NlogL;

if cont==1
ceps3=ceps(:,1:sp(i+1));
obj=gm.distribution.fit(ceps3',1,'options',options);
y2=-obj.NlogL;

else
ceps3=ceps(:,sp(i-1):sp(i+1));
obj=gm.distribution.fit(ceps3',1,'options',options);
y2=-obj.NlogL;
end


a(i+1)=y1+y-y2;
end

上面的结果是具有所有比较值的向量,有些是负数,有些是正数....在上述程序中,迭代是连续执行的,例如:对于第一次迭代,比较在第一段之间(即:从1到200)和第二段(即:从200到400),在第二次迭代中,比较在第二段(200到400)和第三段(400到500)之间。

但现在我想修改它,因为在第一次迭代中,比较应该在第一段(1到200)和第二段(200到400)之间。比较的结果将是正面的或负面的。 / p>

CASE1: 如果它是负的,那么指向绿色并移动第二次迭代,我们将在第二段(200到400)和第三段(400到500)之间进行比较

CASE2: 如果结果为正,我们会将该点保持为绿色,但现在在下一次迭代中,比较在第一段(1到400)和第二段(400到500)之间。

sp矢量有20个值,现在我通过给每个点赋予属性来绘制图表上的20个值。

figure
plot(sp,'--rs','markeredgecolor','k','markerfacecolor','g','markersize','2');

enter image description here 现在我如上所述对每个点进行处理,结果将为正或负。 如果结果为负,那么我需要更改处理的那个点的颜色属性。 如果它是正数,那么它应保持不变。

所以我需要一个图表,其中负值点应为红色,其他所有值(正值pts)应为绿色。

最后它应该丢弃图中的所有绿点

我该怎么做......

1 个答案:

答案 0 :(得分:1)

我编写了一个简单的例子,演示如何根据循环中的值更改点颜色。

t = 0:0.03:3;
y = sin(2*pi.*t);

figure; hold on;
plot(t,y,'k');
grid;

for i=1:length(x)

    %Select color
    if y(i)<0
        mycolor = 'r';
    else
        mycolor = 'g';
    end

    plot(t(i), y(i), 'sk','markersize',8,'markerfacecolor',mycolor);

end

或者你可以用更典型的MATLAB方式来实现它:

idx_neg = (y<0);
idx_pos = ~(idx_neg);
x_neg = x(idx_neg);
y_neg = y(idx_neg);
x_pos = x(idx_pos);
y_pos = y(idx_pos);
figure;
plot(x_neg,y_neg,'sk','markersize',8,'markerfacecolor','r');
plot(x_pos,y_pos,'sk','markersize',8,'markerfacecolor','g');

您应该可以轻松地将其用于您的代码,但我会留给您!

<强>输出:

Coloured sine wave


当你完成时,不要丢弃图中的所有绿点,为什么不只绘制红点。