隐藏图中某些图形对象的MATLAB图例条目

时间:2017-02-26 16:58:17

标签: matlab plot legend

MATLAB图例列出了绘图中的所有内容,包括您在绘图上添加的指南。

要解决这个问题的琐事

;with cte as 
    (
      select SimId /* just the key column */
      from dbo.sims
      where ...
      order by ...
      offset @PageSize * (@PageNumber - 1) rows
      fetch next @PageSize rows only
    )
    select column_list...
      from dbo.sim as s
        inner join cte on s.SimId = cte.SimId -- or exists
        left join Agents ag ...
      order by ...
      option (recompile);

然而,MATLAB将最新的行放在前面,这意味着指南会覆盖显示的数据;丑陋和分散注意力。

每当你构建一个复杂的情节时都会出现类似的问题,*Plot *Add legend *Add guidelines 吓坏了并抓住了一切,而绘图顺序的变通方法也很难看

示例代码:

legend

(移动代码块顺序以复制上述情况)

如何合理地解决这个问题?

3 个答案:

答案 0 :(得分:6)

如果您希望某个图形对象不生成图例(即使您再次关闭图例也会有效),您可以修改LegendInformation

%# plot something that shouldn't show up as legend
handleWithoutLegend = plot(something);

%# modify the LegendInformation of the Annotation-Property of the graphical object
set(get(get(handleWithoutLegend,'Annotation'),'LegendInformation'),...
    'IconDisplayStyle','off');

%# toggle legend on and off at will, and never see the something-object appear

如果您尝试关闭句柄数组上的图例,最好的方法就是循环遍历它们,使用try-wrapper来处理无法生成图例的图形对象:

for h = listOfHandles(:)'
   try
      set(get(get(h,'Annotation'),'LegendInformation'),...
        'IconDisplayStyle','off');
   end
end

答案 1 :(得分:3)

制作您提供给%**** Optional guidelines figure(1) plot([2 2],[0,1],'k--'); hold on %**** DATA N = 4; y=rand(5,N); x=1:1:5; for plotLoop=1:N; %* Plot figure(1) plot(x,y(plotLoop,:)); hold on end %*****LEGEND hLegend = legend(LegTxt,... 'interpreter','latex',... 'location','eastoutside') 的自定义句柄。可以连接绘图句柄以形成图例,传奇很乐意将其作为输入接受。

所需的代码并不漂亮,但确实有效。

legend

对于迂腐或好奇,循环%**** Optional guidelines for periodicity figure(1) plot([2 2],[0,1],'k--'); hold on %**** DATA N = 4; y=rand(5,N); x=1:1:5; for plotLoop=1:N; LegTxt{plotLoop} = num2str(plotLoop); %* Plot figure(1) % if statement to construct a handle for the legend later if plotLoop==1 htot=plot(x,y(plotLoop,:)); else h=plot(x,y(plotLoop,:)); % Append this info to the figure handle htot= [htot, h]; end hold on end %*****LEGEND hLegend = legend(htot,LegTxt,... 'interpreter','latex','FontSize',16,... 'location','eastoutside') 在这里,因为我从一些相当复杂的代码中提取了示例,其中数据是从单元格数组中提取的。显然你可以在很多使用场景中消除这个循环,我只是决定让代码保持最灵活的格式!

答案 2 :(得分:0)

您还可以通过其他方式隐藏图例中的情节。这是示例:

figure(1)
hold on

x=1:10;
y1=x;
y2=x.^2/10;
y3=x.^3/100;

plot(x,y1);
plot(x,y2,'HandleVisibility','off');
plot(x,y3);

legend('x','x^3')

您只需要将'HandleVisibility', 'off'放到您不想在图例中显示的地块。结果就是这样:

sample result

HandleVisibility是一个线属性,因此如果您以其他方式创建绘图,它现在可能会起作用。但是对于大多数用例来说,它就足够了,而且要简单得多。