Нарисуйте легенду в фигуре Matlab - PullRequest
0 голосов
/ 26 сентября 2018

Я хотел бы поместить стрелку над легендой на графике Matlab, но когда я добавляю стрелку, легенда по умолчанию оказывается «сверху» (см. Рисунок, черная линия которого покрыта легендой).

Есть ли способ подтолкнуть подфигуру, например стрелку, к «вершине», чтобы она отображалась над всеми другими компонентами фигуры, включая легенду?Я пытался использовать uistack, но это не работает с легендами.uistack как следует из документа: « Изменить порядок визуального размещения компонентов пользовательского интерфейса ».

edit:

Очень простой пример: строка, котораяЯ рисую должен появиться поверх легенды.

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');

enter image description here

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Вы можете сделать фон легенды прозрачным - так, чтобы вы видели стрелку в легенде

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 имеет значение [RGB Transparency]

Для информации: это было сделано с помощьюR2015b.

Example output using R2015b

0 голосов
/ 26 сентября 2018

Вы можете 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

enter image description here

0 голосов
/ 26 сентября 2018

Какую версию MATLAB вы используете?uistack, кажется, больше не работает с легендами, начиная с MATLAB 2015b (см. Эту похожую проблему ).

Если, как вы говорите, строка может появиться в любом месте, лучше всегоОбходным путем может быть выбор best местоположения легенды

l = legend(b,'value','Location','Best','AutoUpdate','off');
...