How to enlarge legend marker size in r2014b?

In previous versions one could grab the children of the legend object to change their size individually but now those don't exist anymore. How can I present larger markers in the legend that correspond to tiny scatter dots?
thanks!

Risposte (2)

The marker handles are still there...
load seamount;
hs = scatter(x,y,5,z);
[hleg, hobj, hout, mout] = legend(hs, 'test');
hobj(2).Children.MarkerSize = 10;

4 Commenti

The Children is an empty list now in 2014b. Here look:
hobj(2).Children
ans =
0x0 empty GraphicsPlaceholder array.
I tried to use your example with these line but that enlarged the actual scatter as well
for houti=1:numel(hout)
hout(houti).MarkerSize = 12;
end
Odd... I'm seeing different results. Running 2014b on Mac OS X 10.9.3:
>> load seamount;
>> hs = scatter(x,y,5,z);
>> [hleg, hobj, hout, mout] = legend(hs, 'test');
>> hobj
hobj =
2x1 graphics array:
Text (test)
Group (test)
>> hobj(2).Children
ans =
Patch with properties:
FaceColor: 'none'
FaceAlpha: 1
EdgeColor: 'none'
LineStyle: '-'
Faces: 1
Vertices: [0.37164 0.5]
Show all properties
Without making any changes, the MarkerSize seems to be set to 6, and appears larger than the scatter objects:
Are you sure you were referencing hobj, and not hleg.Children? Because it's true that the legend objects are no longer children of the legend itself, as they were in previous versions, but you can still access those handles via the second output to the legend function. The third output, hout, references the labeled objects (so in this case hout and hs are the same), which is why changing the size changed your scatter plot markers.
If I change the MarkerSize property of hobj(2).Children, it enlarges the legend symbol on my screen
hobj(2).Children.MarkerSize = 20;
Though on a side note, I had to get that second figure via a screen capture, because the legend symbol size reverts to its original when I try to save via the usual methods (tried export_fig, print, and the "Save As" menu option).
I've tracked the reverting-on-export issue to line 215 in print.m, which calls the private function alternatePrintPath.p... not quite sure what goes on under the hood there, but it seems to relink the legend to its labeled objects.
If you use my legendflex function instead, you can get the proper export, since the new "legend" isn't a real legend object and therefore decouples the label from the original data object:
hs = scatter(x,y,5,z);
[hleg, hobj, hout, mout] = legendflex(hs, {'test'});
set(get(hobj(2), 'Children'), 'markersize', 20);
(Though I'm a little behind in getting that function thoroughly R2014b-compatible. It works for most cases, but I still have some numeric handles left over that should be converted to graphics objects... I hope to get that cleaned up soon).
P.S. In response to Star, writing and maintaining legendflex.m is how I've learned my way around the inner workings of legends. I can't take credit for the bar offset property; I found this by the master of all things undocumented in another Answer.
Thanks for that link, Kelly. I’d not discovered it.
I’m going to keep R2014a installed in the event I actually need to do something!
R2014b is frustrating in its many limitations. (Among its other problems, the datetime functions cannot be used with surface plots. At least in some instances, setting options to override defaults doesn’t automatically switch the associated ‘Mode’ to 'manual'. That has to be done in a separate command in order to get the override to work.)

Accedi per commentare.

Confirming on R2017a that the second output of legend has the necessary handles e.g.
[~,b] = legend('foo','bar','baz')
K>> b
b =
6×1 graphics array:
Text (a)
Text (b)
Text (c)
Group (a)
Group (b)
Group (c)
However, they are nested within the Group objects, and they are also a mixture of line and patch objects. An easy way to change the size then is to use findobj() to retrieve all of the handles with the MarkerSize property, and then to set them i.e.
set(findobj(b,'-property','MarkerSize'),'MarkerSize',10)

3 Commenti

This works for making the marker size bigger in the legend, but then the text is not interpreted by LaTeX, instead it's interpreted by TeX, and even changing it manually (by right clicking on the actual figure, for example), it does not get interpreted by LaTeX!
The font size also seems not to change :'(
You can try it as follows to set your text. I hope that it can work.
[L2,obj2]=legend(handles, labels, 'Location', 'northwest', 'NumColumns', 1);
objhl = findobj(obj2, 'type', 'patch');
set(objhl, 'Markersize', 12)
textl = findobj(obj2, 'type', 'text');
set(textl,'Interpreter', 'latex');

Accedi per commentare.

Prodotti

Richiesto:

il 20 Nov 2014

Commentato:

il 5 Feb 2026

Community Treasure Hunt

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

Start Hunting!

Translated by