Changing the inter-item spacing in Legends (version 9 and up)
It turns out that the Spacings
option does exactly what is needed, even though its use in legend constructs such as PointLegend
is not documented, and it shows as red text when you use it in those constructs.
PointLegend[{Red, Blue}, {"Series 1", "Series 2"},
LegendMarkers -> {{"\[FilledCircle]", 20}, {"\[FilledCircle]", 20}},
Spacings -> {0.2, 0.2}, LegendMarkerSize -> 19,
LabelStyle -> {FontFamily -> "Arial", FontSize -> 20}]
This continues the tradition of undocumented options and functions in Mathematica.
UPDATE (2): the Spacings
option is still marked with red text in version 10.0.1, 10.1 and 10.3 and 11.0.
Another option, which I use now, is to use Grid
. With Grid
you have all the options that comes with Grid
and hence you can build the legend in as many different ways as you wish.
Manipulate[
plotLegend =
Placed[LineLegend["Expressions", LegendMargins -> 1,
LegendLayout -> Function[{x},
Grid[x, Spacings -> {hspacing, vspacing}, Alignment -> Left,
Frame -> isFrame]]], location];
Plot[{Sin[x], Cos[x]}, {x, -Pi, Pi}, PlotLegends -> plotLegend,
ImageSize -> 300, ImageMargins -> 50, Frame -> True],
Grid[{
{"vertical spacing",
Control[{{vspacing, .1, ""}, 0, 3, .01, Appearance -> "Labeled"}]},
{"horizontal spacing",
Control[{{hspacing, .1, ""}, 0, 3, .01, Appearance -> "Labeled"}]},
{"add frame?", Checkbox[Dynamic[isFrame]], , SpanFromLeft},
{"location?", PopupMenu[Dynamic[location, (location = #) &],
{
{Right, Top} -> Style["{Right,Top}", 12],
Right -> Style["Right", 12],
Left -> Style["Left", 12],
{Right, Bottom} -> Style["{Right,Bottom}", 12],
Above -> Style["Above", 12],
Below -> Style["Below", 12]
}], SpanFromLeft
}
}, Spacings -> {0, 1}, Alignment -> Left],
{{location, {Right, Top}}, None},
{{isFrame, True}, None}
]