How to change in marker size in the global legend?
10 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Zhe Dong
el 14 de Ag. de 2024
Hi,
I'm making a plot containing a few subplots using the function tiledlayout, and I created a global legend using the code
leg = legend({'A','B','C'})
leg.Layout.Tile = 'North'
However with this I can't use the previous method to change the marker size in the legend, because it requirs two outputs from the legend, and it will override the previous code.
[~,icons] = legend({'A','B','C'})
icons1=findobj(icons,'type','patch');
set(icons1,'MarkerSize',15,'Linewidth',1.5);
Anyone know the workaround of this? many thanks!
0 comentarios
Respuesta aceptada
Voss
el 14 de Ag. de 2024
[leg,icons] = legend({'A','B','C'});
leg.Layout.Tile = 'North';
icons1=findobj(icons,'type','patch');
set(icons1,'MarkerSize',15,'Linewidth',1.5);
1 comentario
Más respuestas (2)
Benjamin Kraus
el 14 de Ag. de 2024
Editada: Benjamin Kraus
el 14 de Ag. de 2024
The only documented way to modify the legend items independently from the contents of the axes is to create "dummy" objects with all NaN data. For example, this code uses copyobj to duplicate the "real" line objects, then uses set to change the XData and YData to NaN, so that the duplicate items don't show up in the main axes. When you create the legend, you need to specify which three line objects (the duplicates) you want in the legend. Now you can set properties on those duplicated objects and they will be represented in the legend but not in the axes.
This same strategy works whether you are using one legend in the axes, or using a tiledlayout to create a global legend.
pReal = plot(magic(3),'.-');
pNaN = copyobj(pReal, pReal(1).Parent);
set(pNaN,"XData",NaN,"YData",NaN);
h = legend(pNaN, {'A', 'B', 'C'});
set(pNaN, 'MarkerSize', 30);
0 comentarios
Matt J
el 14 de Ag. de 2024
Editada: Matt J
el 14 de Ag. de 2024
You will probably have to use legendflex from the file exchange,
This means falling back to subplot, I'm afraid.
for i=1:2
subplot(20,2,6+i:2:40);
h=plot(rand(5,3));
[h.Marker]=deal('x','o','v');
end
[leg,icons]= legendflex( {'A','B','C'},'ref',gcf, 'anchor', {'n','n'},'buffer',[0,-5]);
set(findall(icons,'type','line'),'MarkerSize',10,'Linewidth',2);
0 comentarios
Ver también
Categorías
Más información sobre Legend en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!