Нарисуйте легенду на фигуре Matlab

Я хотел бы разместить стрелку над легендой в графике 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');

Нарисуйте легенду на фигуре Matlab

обновил @Adriaan. Очевидно, что в конечном итоге линия окажется в другом месте, но я хочу, чтобы она отображалась поверх легенды.

HXSP1947 26.09.2018 08:46

Не могли бы вы добавить примерное изображение того, как должен выглядеть желаемый результат? Я хочу убедиться, что правильно понимаю. Стрелку с помощью annotation пробовали делать? Я подключаю предложение @gehbiszumeis к переместить легенду вместо того, чтобы пытаться сделать линию выше нее (это невозможно, поскольку линия является частью осей, а легенда похожа на ее собственные оси, поэтому либо вся легенда невидима, либо покрывает строку, если вы не используете аннотации, как я уже упоминал).

Dev-iL 26.09.2018 09:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
283
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Какую версию 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.

Example output using 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

Другие вопросы по теме