【问题标题】:MATLAB: changing color of line in a while loopMATLAB:在while循环中改变线条的颜色
【发布时间】:2016-07-13 13:24:33
【问题描述】:

我正在 Matlab 中绘制一个图形。我在 while 循环中执行此操作,并且我正在使用该图来可视化循环期间发生的事情。

对于每个 while 循环迭代,我想更改线条颜色,以便轻松监控 while 循环中的变化。

目前,我必须为情节编写以下代码:

    AOAstr = num2str(AOA);
    figure(2)
    pl = plot(Span_Loc,CPcrit2,'r');
    legendStrs = {'Critical |CPpeak-CPte|'};
    set(pl,'linewidth',1.5);
    hold on
    plot(Span_Loc,CPdiff2)
    legendStrs = [legendStrs, {strcat('Local |CPpeak-CPte|','-','AOA=',AOAstr)}];
    title('Effective angle of attack')
    xlabel('semi-span')
    ylabel('|CPpeak-CPte|')
    legend('boxon')
    legend(legendStrs,'Location','SouthWest'); 

注意:while 循环中的运行变量是 AOA,因此每次迭代,AOA 都会发生变化,CPdiff2CPcrit2 上的新数据可用。因此,我想用颜色hold on 绘制旧数据,然后在同一图中绘制第二个while 循环迭代的数据,但plot(Span_Loc,CPdiff2) 使用不同的颜色,同时更新图例。

我想不通,谁能帮帮我?

谢谢!

【问题讨论】:

  • 您使用的是哪个版本的 MATLAB?您是否希望 CPcrit2 线段全部为红色并且仅在 CPdiff2 线段上更改颜色?
  • 嗨@Dan,CPcrit2 可能一直是红色的,CPdiff2 需要改变颜色,因为它在每次迭代中变化最大。目前,我正在运行 Matlab 8.2.0.701 (R2013b)
  • pre 2014b,而不是 hold on 尝试 hold all
  • @Dan,现在工作正常,所有线条颜色都在变化。但是,图例并未相应扩展,因为它仅显示了最后一次迭代和相关的 AOA。你知道如何解决这个问题吗?
  • 在你的循环之后检查legendStrs的大小和类型,你也应该只调用一次legend,它应该在循环之外

标签: matlab plot


【解决方案1】:

线条的颜色可以在plot() 中指定为RGB 值([r, g, b])。 r,g,b 的值应介于 0 和 1 之间。因此,您可以将颜色指定为循环变量 AOA 的函数。

例如,您可以指定线条颜色,例如 plot(Span_Loc,CPdiff2, 'color', [0, AOA/255, 0]) 假设 AOA 永远不会大于 255。

【讨论】:

    【解决方案2】:

    @Thanushan Balakrishnan 的回答很好,但您可能希望对颜色等有更高的控制权。

    在我看来,将这些可视化的最佳方法是使用颜色图,因为它们不仅仅是单一颜色,而是颜色的视觉组合。

    作为一个例子,这段代码每次绘制的东西都比上一次迭代要高一些。向上表示更大ii

    x=1:100;
    
    y=rand(1,100);
    
    num_iter=90; 
    cmap=magma(num_iter); % I used my own colormap but you can use parula or something else
    hold on
    for ii=0:num_iter-1
        plot(x,y+ii*0.1,'color',cmap(ii+1,:));
    end
    

    如果你不能事先知道你的迭代次数,我建议你遍历颜色图。

    这样做的一个好方法如下:

    x=1:100;
    y=rand(1,100);
    
    num_iter=100;
    cmap=magma(30); % notice, colormap is smaller
    cmap=[cmap; flipud(magma(30))]; % make colormap go back to the first colro again
    
    % now cmap is 60, but iterations are 100!
    
    hold on
    for ii=0:num_iter-1
        plot(x,y+ii*0.1,'color',cmap(mod(ii,size(cmap,1))+1,:)); 
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 2018-08-25
      • 2018-03-13
      • 1970-01-01
      • 2015-10-27
      相关资源
      最近更新 更多