Matlab:fill 命令向图例添加两个元素。如何避免这种情况

Matlab: fill Command Adds Two Elements to Legend. How to Avoid This

我正在处理一个 Matlab 项目,我需要在其中使用 fill 命令。 fill 命令 fill(X,Y,C) 根据 X 和 Y 中的数据创建填充多边形,顶点颜色由 C 指定。

我有以下代码:

x_2 = [x, fliplr(x)];
inBetween = [Auf1_mW_pro_mg(1781:length(Auf1_mW_pro_mg)), fliplr(y_Temp)];
figure('Name','Test')
fill(x_2, inBetween, 'r','facealpha',.5,'LineStyle','none');
legend()

... ,这让我得到了这个结果:

如您所见,我有两个区域,因为我的数据是真实数据,外推线并不总是只有数据线在其上方。

有人知道如何避免在这种情况下图例中显示两个数据元素吗?从图例中删除元素似乎不是一件容易完成的事情,这是我的第一个想法。也许我可以控制将哪些数据添加到图例?

谢谢!

如果 fill 在图例中出现两次,则创建两个补丁。您可以为 legend 设置这些单独补丁的可见性。首先存储图形对象的句柄

h = fill(x_2, inBetween, 'r','facealpha',.5,'LineStyle','none');

这将return一个2×1的Patch数组,其中你可以为第二个元素设置HandleVisibility 属性:

h(2).HandleVisibility = 'off';

现在它不会显示在您的图例中。但是像findobj这样的函数也找不到补丁,后果详解here).

只需保留并使用要在图例中显示的对象的句柄。

示例:

首先重现您的问题:

t = (1/16:1/8:1).'*pi;   x = sin(t);   y = cos(t);
%Making the plots now
plot(t,x,'r','linewidth',2);
hold on;
h1 = plot(t,y,'b','linewidth',2); %We want to show this in the legend
h2 = fill([x fliplr(x)],fliplr(y),'g'); %and one entry only for this
plot(x,y,'k','linewidth',2);

现在 legend() 给我们:

我们可以使用所需对象的句柄来解决此问题,如下所示:

legend([h1, h2(1)]);
% or if we want to name these objects then:
% legend([h1, h2(1)],'Line Plot','Filled Polygon');

给出: