Есть 2 вещи, которые вы не делаете прямо с кодом (кроме того, что вы используете size
как ручку к легенде ... это опасно, потому что size
является встроенной функцией):
1) Вызов legend
, содержащий только один аргумент, возвращает дескриптор объекта легенды, и его позиция фактически дает вам положение поля, содержащего легенду, то есть текст + строку.
2) Используя эту строку:
p(3) = p(3) - 0.06;
ли изменить положение, однако вам нужно будет установить новое положение легенды с чем-то вроде следующего за изменения, чтобы быть эффективными:
set(HandleToLegend,'Position',p)
Чтобы вернуться к вашему вопросу, трюк заключается в назначении многих выходов во время вызова legend
; вы можете затем модифицировать определенные элементы объекта легенды.
На самом деле нам нужно только 1 из 4 выходных аргументов, называемых icons
в документах, поэтому я буду придерживаться обозначений. Затем мы можем получить свойство XData
линии и изменить его, как мы хотим. XData
на самом деле является 2-элемент вектора:
[StartingPoint EndingPoint]
так что изменение одной или другой (или оба) изменит длину линии, отображаемой в окне легенды.
Вот целый код с комментариями; Я изменил длину и ширину линии линии на втором рисунке, чтобы выделить изменения.
clear
clc
close all
x = 1:10;
y = rand(1,10);
figure;
%// Default case
subplot(1,2,1)
plot(x,y);
legend('First plot','Location','NorthWest');
title('Before','FontSize',18);
%// With modifications
subplot(1,2,2)
plot(x,y);
title('After','FontSize',18);
%//========================
%// Change the legend here
%//========================
%// The "icons" output is what you want
[~,icons,~,~] = legend('First plot','Location','NorthWest');
%// icons(1) is the text of the current element in the legend Here its 'First plot'
i_1 = get(icons(1)); %// access the properties with this command.
%// icons(2) is the line associated with that text. Here the blue line.
i_2 = get(icons(2));
%// Mhh I don't know what icons(3) represents haha sorry about that.
i_3 = get(icons(3));
%// Get the actual line
hline = icons(2);
%// Fetch its XData property
LineData = get(hline,'XData')
%// Play with those 2 elements to see the output change.
NewData = [LineData(1)+.2 LineData(2)-.01];
%// Apply the changes
set(hline,'XData',NewData,'LineWidth',3)
Что дает следующее:
Я пытался, но он не делает работу. –