【问题标题】:Matlab: fill Command Adds Two Elements to Legend. How to Avoid ThisMatlab:填充命令将两个元素添加到图例。如何避免这种情况
【发布时间】:2020-05-25 14:29:01
【问题描述】:

我正在处理一个需要使用fill 命令的Matlab 项目。 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()

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

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

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

谢谢!

【问题讨论】:

  • 使用legend('data1') 而不是legend()
  • 这确实有帮助。但是,我的实际项目中有一个更长的图例,所以这只有在我最后使用创建的图中的填充命令时才有帮助,在此之前还有其他图。在这种情况下,我可以通过不再支持任何更多的字符串元素来在某一点切断图例。但是,如果我想在图例中间显示此特定数据,则不能仅凭此解决问题。
  • 嗨蒂蒙,请参阅answer

标签: matlab matlab-figure figure


【解决方案1】:

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

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

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

h(2).HandleVisibility = 'off';

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

【讨论】:

  • 这是完成我想要的最简单的方法,但也有提到的缺点。
【解决方案2】:

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

示例:

首先重现您的问题:

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');

给出:

【讨论】:

  • 有没有办法为相应的数据添加文本到图例中?所以我想代替“data1”和“data2”,例如“传奇1”和“传奇2”。
  • 如代码的最后(注释)行中所述:您可以使用:legend([h1,h2(1)],'legend1','legend2');
猜你喜欢
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
相关资源
最近更新 更多