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}]

enter image description here

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}
 ]

Mathematica graphics

Tags:

Legending