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

Matlab:fill命令将两个元素添加到图例中。如何避免这种情况,matlab,matlab-figure,figure,Matlab,Matlab Figure,Figure,我正在从事一个Matlab项目,其中需要使用fill命令。fill命令fill(X,Y,C)使用C指定的顶点颜色从X和Y中的数据创建填充多边形 我有以下代码: 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'

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

我有以下代码:

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
在图例中显示两次,则会创建两个修补程序。您可以为
图例
设置这些单个修补程序的可见性。首先存储图形对象的句柄

h = fill(x_2, inBetween, 'r','facealpha',.5,'LineStyle','none');
这将返回一个2×1的补丁数组,您可以为第二个元素设置
handleviability
属性:

h(2).HandleVisibility = 'off';

现在它不会出现在你的传奇中。但是像
findobj
这样的函数也找不到补丁,更详细的结果是什么)。

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

h = fill(x_2, inBetween, 'r','facealpha',.5,'LineStyle','none');
这将返回一个2×1的补丁数组,您可以为第二个元素设置
handleviability
属性:

h(2).HandleVisibility = 'off';

现在它不会出现在你的传奇中。但是像
findobj
这样的函数也找不到修补程序,更详细地了解其后果)。

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

示例:

首先复制您的问题:

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');
其中:


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

示例:

首先复制您的问题:

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');
其中:


使用
legend('data1')
而不是
legend()
这确实有帮助。然而,在我的实际项目中,我有一个较长的图例,因此,只有在创建的图形中最后使用fill命令时,这才有帮助,在这之前还有其他的绘图。在这种情况下,我可以通过不支持任何更多的字符串元素在一个点上剪切图例。但是,如果我想在这个传说的中间显示这个特殊的数据,这个问题是不能单独解决的。嗨,Timon,请看使用<代码>传说(‘DATA1’)<代码>,而不是<代码>传奇()/>代码>这确实有帮助。然而,在我的实际项目中,我有一个较长的图例,因此,只有在创建的图形中最后使用fill命令时,这才有帮助,在这之前还有其他的绘图。在这种情况下,我可以通过不支持任何更多的字符串元素在一个点上剪切图例。然而,如果我想在这个传说的中间展示这个特殊的数据,这个问题是不能单独解决的。嗨,Timon,请看这是最简单的方法来完成我所希望的,用下边提到的。这是最简单的方法来完成我所希望的。有没有办法在图例中添加相应数据的文字?因此,我希望使用例如“legend1”和“legend2”来代替“data1”和“data2”。如代码最后一行(注释)所述:您可以使用:
legend([h1,h2(1)],'legend1','legend2')是否有办法为相应数据向图例中添加文本?因此,我希望使用例如“legend1”和“legend2”来代替“data1”和“data2”。如代码最后一行(注释)所述:您可以使用:
legend([h1,h2(1)],'legend1','legend2')