Я хотел бы разместить стрелку над легендой в графике Matlab, но когда я добавляю стрелку, легенда по умолчанию находится «сверху» (см. Рисунок, черная линия покрыта легендой).
Есть ли способ переместить субфигурку, например стрелку, в «верх», чтобы она отображалась поверх всех остальных компонентов фигуры, включая легенду? Я пробовал использовать uistack, но, похоже, это не работает с легендами. uistack, как сказано в документе, должен "Изменение порядка визуального наложения компонентов пользовательского интерфейса".
редактировать:
Очень простой пример: линия, которую я рисую, должна появиться поверх легенды.
figure;
b = bar(1:3,rand(3));
hold on;
p = plot([0,3],[0,.5],'Color','k','linewidth',1.5); % my arrow
l = legend(b,'value','Location','SouthWest','AutoUpdate','off');
uistack(l,'bottom');
Не могли бы вы добавить примерное изображение того, как должен выглядеть желаемый результат? Я хочу убедиться, что правильно понимаю. Стрелку с помощью annotation пробовали делать? Я подключаю предложение @gehbiszumeis к переместить легенду вместо того, чтобы пытаться сделать линию выше нее (это невозможно, поскольку линия является частью осей, а легенда похожа на ее собственные оси, поэтому либо вся легенда невидима, либо покрывает строку, если вы не используете аннотации, как я уже упоминал).





Какую версию MATLAB вы используете? uistack, похоже, больше не работает с легендами, начиная с MATLAB 2015b (см. Этот аналогичный проблема).
Если, как вы говорите, линия может появиться в любом месте, лучшим решением может быть выбор местоположения легенды best.
l = legend(b,'value','Location','Best','AutoUpdate','off');
Вы можете сделать фон легенды прозрачным, чтобы стрелка была видна сквозь легенду.
figure;
b = bar(1:3,rand(3));
hold on;
p = plot([0,3],[0,.5],'Color','k','linewidth',1.5); % my arrow
l = legend(b,'value','Location','SouthWest','AutoUpdate','off');
l.BoxFace.ColorData = uint8([255 255 255 127]');
l.BoxFace.ColorType = 'truecoloralpha';
Свойство ColorData имеет значение [R G B Transparency].
Для информации: это было сделано с использованием R2015b.
Вы можете copyobj текущие графические оси gca и установить для его свойства Color значение none. Этот метод проведет линию по участкам легенды и связанным текстам.
Объяснение: Copyobj скопирует и отобразит все axes, относящиеся к bar и line, но не легенду (легенды имеют axes сами по себе). Изображение скопированного axes будет идеально совпадать с изображением оригинала. А 'Color','none' делает белый фон скопированного axes прозрачным, таким образом делая legend снова видимым, но видимым под линию.
Вот код
f = figure;
b = bar(1:3,rand(3));
hold on;
p = plot([0,3],[0,.5],'Color','k','linewidth',1.5); % my arrow
l = legend(b, 'Location','SouthWest');
% add some magic
hax = copyobj(gca, f); % copy the current axes to the figure
set(hax, 'Color', 'none') % set the new axes's background transparent
обновил @Adriaan. Очевидно, что в конечном итоге линия окажется в другом месте, но я хочу, чтобы она отображалась поверх легенды.