如何防止图例在 R2017a 及更高版本中更新?

Posted

技术标签:

【中文标题】如何防止图例在 R2017a 及更高版本中更新?【英文标题】:How to prevent the legend from updating in R2017a and newer? 【发布时间】:2019-12-12 02:23:25 【问题描述】:

自 MATLAB R2017a 起,在向坐标区添加绘图时,图形图例会自动更新。以前,可以这样做:

data = randn(100,4);
plot(data)
legend('line1','line2','line3','line4')
hold on
plot([1,100],[0,0],'k-')

用图例绘制四条数据线,然后为 y=0 添加一条黑线。但是,从 R2017a 开始,这会导致将黑线添加到图例中,名称为“data1”。

如何防止将这一行添加到图例中,以使代码的行为与旧版本 MATLAB 中的行为一样?

到目前为止,我在 Stack Overflow 上找到的唯一解决方案是 remove the legend item after it has been added。语法不漂亮:

h = plot([1,100],[0,0],'k-'); % keep a handle to the added line
set(get(get(h,'Annotation'),'LegendInformation'),'IconDisplayStyle','off');

【问题讨论】:

【参考方案1】:

MATLAB R2017a 的发行说明mention this change,并提供了 4 种不同的处理方式。这两种方法最容易放入现有代码中:


1:在添加黑线之前关闭图例的自动更新。这可以在创建时完成:

legend('line1','line2','line3','line4', 'AutoUpdate','off')

或之后:

h = findobj(gcf,'type','legend');
set(h, 'AutoUpdate','off')

您还可以更改所有未来图例的默认值:

set(groot,'defaultLegendAutoUpdate','off')

2:关闭不想添加到图例中的黑线的手柄可见性:

plot([1,100],[0,0],'k-', 'HandleVisibility','off')

IconDisplayStyle 方法也在此处显示。但是,它们使用点符号,这使得语法更漂亮:

h = plot([1,100],[0,0],'k-'); % keep a handle to the added line
h.Annotation.LegendInformation.IconDisplayStyle = 'off';

【讨论】:

以上是关于如何防止图例在 R2017a 及更高版本中更新?的主要内容,如果未能解决你的问题,请参考以下文章

ios7及更高版本导致图像图标错误

用户登录后更新根视图控制器 + iOS 13 及更高版本

如何在 android 2.3 及更高版本中获取当前启动器的包名?

在 Java 11 及更高版本中使用 HttpClient 时如何跟踪 HTTP 303 状态代码?

如何让 NSScrollView 在 10.9 及更高版本中居中文档视图?

如何使用支持库 25.0.0 及更高版本获取片段()