动态图例(每次递归更新)

Kot*_*ots 8 matlab legend figure matlab-figure

我有一个 for i=1:15.在里面我生成一个变量d=1:0.01:10,它是x'x轴,基于此,我创建了一个连续函数F(d),它有2个唯一变量pitch和yaw.然后我使用不同的颜色在每次递归中使用cmap = hsv(15);.那么它是:

d=1:0.01:10;
cmap = hsv(15);

for i=1:15
    pitch = unidrnd(10);
    yaw   = unidrnd(10);

    for j=1:length(d)
        F(j) = d(j)*3*pitch*yaw; %// some long calculation here
    end

    p1 = plot(d,F,'Linewidth', 1.0);
    title ('blah blah')
    set(p1, 'Color', cmap(i,:));
    hold on;
    legend (['pitch,yaw:', num2str(pitch) num2str(yaw)]) 
end 
hold off;
Run Code Online (Sandbox Code Playgroud)

此代码更新每次递归中的唯一音高,偏航值(它们之间没有空格,因此它很有刺激性),但未能:

  1. 使用适当的颜色,如图所示.
  2. 保持上一次迭代的颜色和值pitch,yaw.

cha*_*pjc 27

半密度解决方案

如图所示,可以使用"动态图例"在循环中向图例添加线条,如undocumentedmatlab.com所述.

想法是用以下legend命令替换命令:

legend('-DynamicLegend');
Run Code Online (Sandbox Code Playgroud)

然后plot使用DisplayName参数更新命令:

plot(d,F,'Linewidth',1.0,'DisplayName',sprintf('pitch,yaw: %d,%d',pitch,yaw));

然后添加到轴的绘图将添加到图例中:

在此输入图像描述

如果半成品特征不是你的一杯茶,请使用DisplayName技巧并简单地legend关闭/打开.也就是说,而不是-DynamicLegend:

legend('off'); legend('show');
Run Code Online (Sandbox Code Playgroud)

不要么使用不同的变化DisplayName-DynamicLegend是删除并重新创建与存储字符串数组的图例.

官方解决方案

MathWorks推荐官方解决方案,它抓住现有的图例线条手柄,并用这些手柄手动更新图例.与上面的动态图例解决方案相比,这非常痛苦:

% Get object handles
[LEGH,OBJH,OUTH,OUTM] = legend;

% Add object with new handle and new legend string to legend
legend([OUTH;p1],OUTM{:},sprintf('pitch,yaw: %d,%d',pitch,yaw))
Run Code Online (Sandbox Code Playgroud)

  • 很棒的.gif使用! (4认同)