Stati c подхода
Вот способ сделать это. Я использую расположение легенды NorthEast
в качестве примера. Для других позиций вы можете использовать аналогичные логи c (см. Ниже).
plot([2 -2]) % example plot...
le = legend('abc', 'Location', 'northeast'); % ... with legend
pos_le = get(le, 'position');
pos_ax = get(gca, 'position');
set(le, 'position', [pos_le(1) pos_le(2) pos_ax(1)+pos_ax(3)-pos_le(1) pos_ax(2)+pos_ax(4)-pos_le(2)]); % new position
Чтобы понять, как это работает, обратите внимание, что свойства позиции определены как
[lower_pos, left_pos, width, height]
Так что в в этом случае ширина легенды устанавливается в положение левой оси плюс ширина оси минус положение левой легенды; и аналогично для высоты легенды. Этот лог c работает для легенды в локации NorthEast
. Для других локаций модификация должна быть очевидной.
Динамический c подход
Недостатком вышеупомянутого является то, что легенда перестанет выравниваться, если изменить размер фигуры. Чтобы оставалось выровненным при изменении размера фигуры , вы можете использовать свойство SizeChangedFcn
фигуры, чтобы указать код, который автоматически выполняется при изменении размера фигуры (ResizeFcn
также работает, но не рекомендуется ).
plot([2 -2]) % example plot...
le = legend('abc', 'Location', 'northeast'); % ... with legend
set(gcf, 'SizeChangedFcn', 'le = findobj(gcf, ''type'', ''legend''); pos_le = get(le, ''position''); pos_ax = get(gca, ''position''); set(le, ''position'', [pos_le(1) pos_le(2) pos_ax(1)+pos_ax(3)-pos_le(1) pos_ax(2)+pos_ax(4)-pos_le(2)]);')
set(gcf, 'position', get(gcf, 'position')-1e-3) % force initial call to SizeChangedFcn
set(gcf, 'position', get(gcf, 'position')+1e-3) % restore initial position
Пример: