Как использовать функцию 'legendshrink' в Matlab2014b

Сегодня я нашел ошибку в Matlab2014b. Я использую «legendshrink» для построения графиков, но он показывает «Индекс превышает размеры матрицы». Почему? Следующий код:

  plot(1:10,'.-'); 
  plot(10:-1:1,'o-'); 
  legend({'one' 'two'},'location','north')
  legendshrink 

Функция 'legendshrink' взята из http://github.com/wspr/matlabpkg/ .


person xiaojidan    schedule 20.11.2014    source источник
comment
Каково полное сообщение об ошибке?   -  person David    schedule 20.11.2014
comment
Это показывает, что индекс превышает размеры матрицы. Ошибка в legendshrink (строка 104) cch_min = find(cch==cch_lines(1)); Ошибка в run_main (строка 9)   -  person xiaojidan    schedule 20.11.2014
comment
Я думаю, что это ошибка в Matlab2014b. Все будет в порядке, когда я использую Matlab 2012a.   -  person xiaojidan    schedule 20.11.2014
comment
Это не обязательно ошибка в Matlab 2014b, но это явно другое поведение. Вероятно, лучше сообщить автору функции и/или выполнить отладку самостоятельно.   -  person David    schedule 20.11.2014
comment
У вас должен быть hold on между командами plot, но я не уверен, что это просто проблема с вашим примером кода или нет.   -  person David    schedule 20.11.2014
comment
Можете ли вы помочь решить ее? @Дэйвид   -  person xiaojidan    schedule 20.11.2014
comment
Файл, который вы описываете, был загружен в файлообменник MATLAB до 2009 года, для версии R2007a. Это не ошибка в том, что Mathworks никогда не гарантирует, что устаревшие сторонние функции будут работать во всех версиях MATLAB.   -  person nkjt    schedule 20.11.2014


Ответы (1)


MATLAB 2014b представил новую графическую среду. Похоже, ваша программа legendshrink не совместима с новым фреймворком, но работает со старым 2012a. Возможно, вам следует связаться с автором и попросить его внести некоторые изменения для поддержки нового фреймворка.

Это, вероятно, будет довольно большим изменением: в старой структуре легенда была просто дополнительной осью, добавленной к сюжету. В новом фреймворке появился совершенно новый вид объектов для представления легенд.

Ваша ошибка исходит из строки 104, где код ищет дочерние элементы оси легенды типа 'Line'. В новой структуре у объектов легенды нет дочерних элементов типа 'Line', поэтому legendshrink в том виде, в каком он реализован в настоящее время, вообще не будет работать.

Чтобы было ясно, это не ошибка в MATLAB 2014b, это то, что legendshrink несовместимо с MATLAB 2014b.

person Sam Roberts    schedule 20.11.2014