默认"legend"函数被意外覆盖



我正在使用BNT工具箱,这是一个用matlab编写的大型库,用于贝叶斯网络中的推理。

我不得不将此工具箱添加到 MATLAB 的路径中。但是这样做之后,我不能再使用默认的legend函数了。

我认为这个库可能有他自己的legend函数,覆盖默认函数。如何手动告诉 MATLAB 我想要原始的,而不是新工具箱中的那个?

在 Matlab 2018b 和 2020a 中试用

编辑:重现它:

当我运行测试脚本时,它显示了线条和图例。

https://github.com/bayesnet/bnt,这就是我谈到的工具箱。我下载了它,解压缩,然后将其添加到我的路径中主页 -> 设置路径 -> 添加带有子文件夹的文件夹

当我现在运行脚本时,它显示的是行而不是图例。

注意:当我尝试另一种绘图方式(参见测试脚本 2)时,图例再次显示出来。所以这是一个有效的"解决方法">

Testscript1: (location: C:\Users\TomDe\Downloads\FullBNT-1.0.7\bnt\own\testscript1.m)

x = linspace(0,pi);
y1 = cos(x);
plot(x,y1)
hold on 
y2 = cos(2*x);
plot(x,y2)
legend('cos(x)','cos(2x)')

测试脚本2

% Some other code
tiledlayout(2,1) 
nexttile
plot(inputPath)
hold on
plot(sensorPath)
plot(inputInference)
hold off
title('The Input sequence and sensor readings  ')
legend('Path', 'sensor', 'Inference')

你可以检查 what 函数是否确实如此:

>> which legend -all

掩盖MATLAB 自己的功能通常是一个坏主意。我强烈建议您首先避免此问题。创建一个 MATLAB 包并将此工具箱的源代码放入其中。


仅出于演示目的,我将展示如何调用真正的legend.m

>> wd = pwd;
>> cd 'C:Program FilesMATLABR2020atoolboxmatlabscribe'
>> legend(...)
>> cd(wd);

这是文件在 MATLAB R2020a 安装中的位置。

您可以做两件事:

  1. 您始终希望使用默认legend,而不是工具箱中的:在添加 BNT 工具箱目录时,对addpath调用使用-end选项,以便其函数显示在路径末尾。MATLAB 将始终通过依次查看路径目录来查找函数,因此路径中较早的目录具有优先权。

  2. 您想使用两个版本的legend,并希望选择使用哪一个:编写一个小的支持函数,从路径中删除BTN工具箱,调用legend,然后重新添加工具箱。这样的函数看起来像这样(将其保存为路径中某处的original_legend.m,然后以与调用legend相同的方式使用它,但改用这个新名称):

    function out = original_legend(varargin)
    rmpath /path/to/bnt/toolbox
    out = legend(varargin{:});
    addpath /path/to/bnt/toolbox
    

相关内容

  • 没有找到相关文章