ํ•„ํ„ฐ ์ง€์šฐ๊ธฐ
ํ•„ํ„ฐ ์ง€์šฐ๊ธฐ

Obtain short lines in a legend in a subplot

์กฐํšŒ ์ˆ˜: 57 (์ตœ๊ทผ 30์ผ)
Moritz
Moritz 2021๋…„ 12์›” 14์ผ
๋Œ“๊ธ€: Moritz 2022๋…„ 1์›” 12์ผ
I am using the code below to generate the plot below. I want to shorten the blue and orange marker lines in the legend. I cannot get the 'Children' of the legend, since this is a '0ร—0 empty GraphicsPlaceholder array'. I couldn't find a solution that works in my code. Thanks in advance ๐Ÿ˜Š
%%Clear and import properties
clear
close all
%% Plot size
f=figure(1);
width = 18;
height = 9;
set(gcf, 'Units', 'centimeters')
set(gcf, 'Position', [-30 8 width height])
set(gcf, 'PaperPositionMode', 'auto')
%Relative positions
%Horizontal
a_h=0.05;
c_h=0.05;
e_h=c_h;
g_h=0.01;
rest=(1-a_h-c_h-e_h-g_h);
b_h=rest/3;
d_h=rest/3;
f_h=rest/3;
%Vertical
a_v=0.1;
c_v=0.13;
e_v=0.02;
rest=(1-a_v-c_v-e_v);
b_v=0.4*rest;
d_v=0.6*rest;
%% Actual plot
%ax(2)=subplot(3,2,2);
%ax(3)=subplot(3,2,3);
ax(1)=subplot(2,3,[1 3]);
pos=get(ax(1),'Position'); %hpos vpos width height
pos(1)=a_h;%horizontal position
pos(2)=a_v+b_v+c_v;%vertical position
pos(3)=1-a_h-g_h;%width
pos(4)=d_v;%height
set(ax(1), 'Position', pos);
ax(2)=subplot(2,3,4);
pos=get(ax(2),'Position'); %hpos vpos width height
pos(1)=a_h;%horizontal position
pos(2)=a_v;%vertical position
pos(3)=b_h;%width
pos(4)=b_v;%height
set(ax(2), 'Position', pos);
ax(3)=subplot(2,3,5);
pos=get(ax(2),'Position'); %hpos vpos width height
pos(1)=a_h+b_h+c_h;%horizontal position
pos(2)=a_v;%vertical position
pos(3)=b_h;%width
pos(4)=b_v;%height
set(ax(3), 'Position', pos);
ax(4)=subplot(2,3,6);
pos=get(ax(2),'Position'); %hpos vpos width height
pos(1)=a_h+b_h+c_h+d_h+e_h;%horizontal position
pos(2)=a_v;%vertical position
pos(3)=b_h;%width
pos(4)=b_v;%height
set(ax(4), 'Position', pos);
axes(ax(1))
plot(linspace(-10,10,100),-linspace(-10,10,100).^2)
axes(ax(2))
plot(linspace(-10,10,100),-linspace(-10,10,100).^2)
hold on
plot(linspace(-10,10,100),+linspace(-10,10,100).^2)
legh=legend(["1^{st} Measurement", "2^{nd} Measurement"]);
set(legh,'Position',[0.235 0.44 0.01 0.01],'Orientation','horizontal')
axes(ax(3))
plot(linspace(-3,3,100),-linspace(-3,3,100).^3)
hold on
plot(linspace(-3,3,100),+linspace(-3,3,100).^3)
axes(ax(4))
plot(linspace(-10,10,100),-linspace(-10,10,100))
hold on
plot(linspace(-10,10,100),+linspace(-10,10,100))
  ๋Œ“๊ธ€ ์ˆ˜: 1
dpb
dpb 2021๋…„ 12์›” 14์ผ
Don't think you'll be able to do anything to the line drawn by legend -- TMW has pretty-well locked down the properties inside it so you can't do much munging on them anymore. The underlying axes of the legend object is now opaque to the point of being almost black; you can't get access to the line handles that make up the displayed lines.
I think it's accept the line style associated with the line handle or you'll have to create a custom pseudo-legend object of your own.

๋Œ“๊ธ€์„ ๋‹ฌ๋ ค๋ฉด ๋กœ๊ทธ์ธํ•˜์‹ญ์‹œ์˜ค.

์ฑ„ํƒ๋œ ๋‹ต๋ณ€

Alagu Sankar Esakkiappan
Alagu Sankar Esakkiappan 2021๋…„ 12์›” 16์ผ
Hi Moritz,
You may change the length of line inside the legend section of a plot using one of its hidden properties "ItemTokenSize". From your example, legh.ItemTokenSize is a 2x1 array where the 1st element represents the length of legend line. By default, it is initialized to [ 30 18 ]. You may change your line length to a shorter line by modifying legh.ItemTokenSize(1) to a smaller value.
You may refer to the following example for modifiying legend's line length:
%%Clear and import properties
clear
close all
%% Plot size
f=figure(1);
width = 18;
height = 9;
set(gcf, 'Units', 'centimeters')
set(gcf, 'Position', [-30 8 width height])
set(gcf, 'PaperPositionMode', 'auto')
%Relative positions
%Horizontal
a_h=0.05;
c_h=0.05;
e_h=c_h;
g_h=0.01;
rest=(1-a_h-c_h-e_h-g_h);
b_h=rest/3;
d_h=rest/3;
f_h=rest/3;
%Vertical
a_v=0.1;
c_v=0.13;
e_v=0.02;
rest=(1-a_v-c_v-e_v);
b_v=0.4*rest;
d_v=0.6*rest;
%% Actual plot
%ax(2)=subplot(3,2,2);
%ax(3)=subplot(3,2,3);
ax(1)=subplot(2,3,[1 3]);
pos=get(ax(1),'Position'); %hpos vpos width height
pos(1)=a_h;%horizontal position
pos(2)=a_v+b_v+c_v;%vertical position
pos(3)=1-a_h-g_h;%width
pos(4)=d_v;%height
set(ax(1), 'Position', pos);
ax(2)=subplot(2,3,4);
pos=get(ax(2),'Position'); %hpos vpos width height
pos(1)=a_h;%horizontal position
pos(2)=a_v;%vertical position
pos(3)=b_h;%width
pos(4)=b_v;%height
set(ax(2), 'Position', pos);
ax(3)=subplot(2,3,5);
pos=get(ax(2),'Position'); %hpos vpos width height
pos(1)=a_h+b_h+c_h;%horizontal position
pos(2)=a_v;%vertical position
pos(3)=b_h;%width
pos(4)=b_v;%height
set(ax(3), 'Position', pos);
ax(4)=subplot(2,3,6);
pos=get(ax(2),'Position'); %hpos vpos width height
pos(1)=a_h+b_h+c_h+d_h+e_h;%horizontal position
pos(2)=a_v;%vertical position
pos(3)=b_h;%width
pos(4)=b_v;%height
set(ax(4), 'Position', pos);
axes(ax(1))
plot(linspace(-10,10,100),-linspace(-10,10,100).^2)
axes(ax(2))
plot(linspace(-10,10,100),-linspace(-10,10,100).^2)
hold on
plot(linspace(-10,10,100),+linspace(-10,10,100).^2)
legh=legend(["1^{st} Measurement", "2^{nd} Measurement"]);
%==============Legend's Line Length modified here===================%
legh.ItemTokenSize(1) = 15;
%===================================================================%
set(legh,'Position',[0.235 0.44 0.01 0.01],'Orientation','horizontal')
axes(ax(3))
plot(linspace(-3,3,100),-linspace(-3,3,100).^3)
hold on
plot(linspace(-3,3,100),+linspace(-3,3,100).^3)
axes(ax(4))
plot(linspace(-10,10,100),-linspace(-10,10,100))
hold on
plot(linspace(-10,10,100),+linspace(-10,10,100))
  ๋Œ“๊ธ€ ์ˆ˜: 1
Moritz
Moritz 2022๋…„ 1์›” 12์ผ
That works perfectly! Thanks a lot!

๋Œ“๊ธ€์„ ๋‹ฌ๋ ค๋ฉด ๋กœ๊ทธ์ธํ•˜์‹ญ์‹œ์˜ค.

์ถ”๊ฐ€ ๋‹ต๋ณ€ (0๊ฐœ)

์นดํ…Œ๊ณ ๋ฆฌ

Help Center ๋ฐ File Exchange์—์„œ Legend์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

ํƒœ๊ทธ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by