matlab - 如何防止图例在 R2017a 及更高版本中更新?
问题描述
从 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 上找到的唯一解决方案是在添加图例项后删除它。语法不漂亮:
h = plot([1,100],[0,0],'k-'); % keep a handle to the added line
set(get(get(h,'Annotation'),'LegendInformation'),'IconDisplayStyle','off');
解决方案
MATLAB R2017a 的发行说明提到了这一变化,并提供了 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';
推荐阅读
- javascript - 为什么我的递归函数在没有通过逻辑测试的情况下进行递归(Javascript 函数帮助)?
- javascript - 使用平滑滚动条插件触发滚动事件的问题
- ffmpeg - FFMPEG 屏幕录制:如何使用 ffmpeg 和 xorg 获取 H265 (libx265) 录制?
- powershell - 如何在 txt 或 csv 文件中获取所有用户的 get-ADPrincipalGroupMembership 并将其放入每个用户的 txt 文件中?
- linux - 如何在 Linux 终端中使用 grep 命令获取四个字母单词的列表?
- javascript - 分离函数的JavaScript问题
- android - Android Studio 4.x 模拟器中缺少模拟器工具栏 3dot 模拟器设置菜单
- jquery - 当我切换到不同的页面时,如何专注于导航栏中的项目?
- javascript - 外部 Javascript 未在 VSCode 中加载
- python - 在 PHP cURL 上接收“您的防伪令牌无效”但在 Python 请求中没有