Matlab: реплицировать масштабируемое поведение локации легенды - PullRequest
0 голосов
/ 09 января 2019

Produced figure

Предыдущая цифра была получена с помощью следующего кода:

hold on;
plot([1,2,3,4],[1,2,3,4]);
plot([1,2,3,4],[4,3,2,1]);
legend('foo', 'bar', 'location', 'eastoutside');

Повторное масштабирование ширины окна рисунка приводит к тому, что легенда сохраняет свои размеры, при этом автоматически масштабируя ширину графика, чтобы охватить размер оставшегося пространства:

scaled figure

При редактировании свойств положения легенды свойство location изменяется на 'none', теряя свое уникальное поведение при масштабировании.

Есть ли способ воспроизвести масштабирование таким образом, чтобы я мог изменить размеры / переместить легенду и / или использовать ее для отношений без оси-легенды?

1 Ответ

0 голосов
/ 09 января 2019

Вы можете получить положение осей и установить положение легенды относительно них. Вот пример:

x = -10:10;
fig  = figure(1);
plot(x,x.^2,x,x.^3);
hL = legend('foo','bar');
% setting the position to the bottom right corner of the axes:
ax = gca;
hL.Position(1:2) = [sum(ax.Position([1 3]))-hL.Position(3) ax.Position(2)];

Чтобы обновлять позицию при изменении размера фигуры, вы можете назначить позицию, установленную для свойства SizeChangedFcn фигуры:

fig.SizeChangedFcn = ...
    'hL.Position(1:2) = [sum(ax.Position([1 3]))-hL.Position(3) ax.Position(2)];';

любое изменение размера рисунка обновит положение легенды.

...