我正在使用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 安装中的位置。
您可以做两件事:
-
您始终希望使用默认
legend
,而不是工具箱中的:在添加 BNT 工具箱目录时,对addpath
调用使用-end
选项,以便其函数显示在路径末尾。MATLAB 将始终通过依次查看路径目录来查找函数,因此路径中较早的目录具有优先权。 -
您想使用两个版本的
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