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');
给出:
我正在处理一个 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');
给出: