【问题标题】:change the color of graph points based on condition in MATLAB根据MATLAB中的条件更改图形点的颜色
【发布时间】:2014-04-03 16:59:09
【问题描述】:

我有 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)之间。比较的结果将是正数或负数。

案例1: 如果它是负数,则将该点设为绿色并移动以进行第二次迭代,我们将在第二段(200 到 400)和第三段(400 到 500)之间进行比较

案例2: 如果结果是肯定的,我们会将该点保持为绿色 olny,但现在对于下一次迭代,比较在第一段(1 到 400)和第二段(400 到 500)之间。

sp 向量有 20 个值,现在我通过为每个点赋予属性将这 20 个值绘制在图上。

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

现在我对上面的每个点进行处理,结果要么是正面的,要么是负面的。 如果结果是否定的,那么我需要更改处理的那个点的颜色属性。 如果是肯定的,那么它应该保持不变。

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

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

我该怎么做...

【问题讨论】:

    标签: matlab matrix graph plot


    【解决方案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');
    

    您应该可以轻松地将其应用到您的代码中,但我将把它留给您!

    输出:


    完成后,与其丢弃图表中的所有绿点,不如只绘制红点。

    【讨论】:

      猜你喜欢
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多