Функция "легенда" по умолчанию перезаписана случайно - PullRequest
0 голосов
/ 06 мая 2020

Я использую BNT-toolbox, большую библиотеку, написанную на Matlab для вывода в байесовских сетях.

Мне пришлось добавить этот набор инструментов в путь к MATLAB. Но после этого я больше не могу использовать функцию legend по умолчанию.

Я думаю, что эта библиотека может иметь свою собственную функцию legend, заменяющую функцию по умолчанию. Как я могу вручную сообщить MATLAB, что мне нужен исходный, а не тот, который находится в новом наборе инструментов?

Пробовал в Matlab 2018b и 2020a

EDIT: для его воспроизведения:

Когда я запускаю тестовый скрипт, он показывает строки и легенду.

https://github.com/bayesnet/bnt, это тот набор инструментов, о котором я говорил. Я загрузил его, разархивировал, а затем добавил в свой путь с помощью Home -> Set path -> добавить папку с подпапкой

Когда я сейчас запускаю скрипт, он показывает строки, а не легенда.

ПРИМЕЧАНИЕ: когда я попробовал другой способ построения графика (см. тестовый сценарий 2), легенда снова появляется. Итак, это рабочий «обходной путь»

Testscript1: (расположение: 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')

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Вы можете проверить, что это действительно так, с функцией which :

>> which legend -all

Обычно это плохая идея затмевать собственные функции MATLAB. Я настоятельно рекомендую вам в первую очередь избегать этой проблемы. Создайте пакет MATLAB и поместите туда исходный код этого набора инструментов.


Только для демонстрационных целей я покажу, как вызвать реальный legend.m:

>> wd = pwd;
>> cd 'C:\Program Files\MATLAB\R2020a\toolbox\matlab\scribe\'
>> legend(...)
>> cd(wd);

это расположение файла при установке MATLAB R2020a.

0 голосов
/ 06 мая 2020

Есть две вещи, которые вы можете сделать:

  1. Вы всегда хотите использовать значение legend по умолчанию, а не значение из панели инструментов: используйте параметр -end к вашему addpath вызову при добавлении каталога панели инструментов BNT, чтобы его функции отображались в конце пути. 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
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...