Legends
Legends visualize scale mappings for visual values such as color, shape and size. Similar to scales and axes, legends can be defined either at the top-level visualization, or within the scope of a group mark.
Legend Properties
Properties for specifying a legend. Legends accept one or more scales as parameters. At least one of the size, shape, fill, stroke, strokeDash, or opacity properties must be specified. If multiple scales are provided, they must share the same domain of input vales. Otherwise, the behavior of the legend is undefined.
Property | Type | Description |
---|---|---|
type | String | The type of legend to include. One of "symbol" for discrete symbol legends, "gradient" for a continuous color gradient, or "discrete" for a discrete color gradient. If gradient or discrete are used, only the fill or stroke scale parameters are considered. If unspecified, the type will be inferred based on the scale parameters used and their backing scale types. |
direction | String | The direction of the legend, one of "vertical" (default) or "horizontal" . |
orient | String | The orientation of the legend, determining where the legend is placed relative to a chart’s data rectangle (default right ). See the legend orientation reference. |
fill | String | The name of a scale that maps to a fill color. |
opacity | String | The name of a scale that maps to an opacity value. |
shape | String | The name of a scale that maps to a shape value. |
size | String | The name of a scale that maps to a size (area) value. |
stroke | String | The name of a scale that maps to a stroke color. |
strokeDash | String | The name of a scale that maps to a stroke dash value. |
strokeWidth | String | The name of a scale that maps to a stroke width value. ≥ 5.0 |
encode | Object | Optional mark encodings for custom legend styling. Supports encoding blocks for legend , title , entries , labels , symbols and gradient . See custom legend encodings. |
format | String | TimeMultiFormat | The format specifier pattern for legend labels. For numerical values, must be a legal d3-format specifier. For date-time values, must be a legal d3-time-format specifier or a TimeMultiFormat object. |
formatType | String | Specifies the type of format to use ("number" , "time" , "utc" ) for scales that do not have a strict domain data type. This property is useful for formatting date-time values for ordinal scales. If specified, the format property must have a valid specifier pattern for the given type. Supported ≥ 5.1, UTC support ≥ 5.8. |
gridAlign | String | The alignment to apply to symbol legends rows and columns. The supported string values are all , each (the default), and none . For more information, see the grid layout documentation. |
clipHeight | Number | The height in pixels to clip symbol legend entries and limit their size. By default no clipping is performed. |
columns | Number | The number of columns in which to arrange symbol legend entries. A value of 0 or lower indicates a single row with one column per entry. The default is 0 for horizontal symbol legends and 1 for vertical symbol legends. |
columnPadding | Number | The horizontal padding in pixels between symbol legend entries. |
rowPadding | Number | The vertical padding in pixels between symbol legend entries. |
cornerRadius | Number | Corner radius for the full legend. |
fillColor | Color | Background fill color for the full legend. |
offset | Number | Value | The offset in pixels by which to displace the legend from the data rectangle and axes. If provided, this value will override any values specified in the legend config. If multiple offset values are specified for a collection of legends with the same orient value, the maximum offset will be used. |
padding | Number | Value | The padding between the border and content of the legend group. |
strokeColor | Color | Border stroke color for the full legend. |
gradientLength | Number | The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient. |
gradientOpacity | Number | Opacity of the color gradient. ≥ 4.1 |
gradientThickness | Number | The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient. |
gradientStrokeColor | Color | Stroke color of the color gradient border. |
gradientStrokeWidth | Number | Stroke width of the color gradient border. |
labelAlign | String | Horizontal text alignment for legend labels. |
labelBaseline | String | Vertical text baseline for legend labels. One of alphabetic (default), top , middle , bottom , line-top , or line-bottom . The line-top and line-bottom values ≥ 5.10 operate similarly to top and bottom , but are calculated relative to the lineHeight rather than fontSize alone. |
labelColor | Color | Text color for legend labels. |
labelFont | String | Font name for legend labels. |
labelFontSize | Number | Font size in pixels for legend labels. |
labelFontStyle | String | Font style of legend labels (e.g., normal or italic ). ≥ 5.0 |
labelFontWeight | String | Number | Font weight of legend labels. |
labelLimit | Number | The maximum allowed length in pixels of legend labels. |
labelOffset | Number | Offset in pixels between legend labels their corresponding symbol or gradient. |
labelOpacity | Number | Opacity of legend labels. ≥ 4.1 |
labelOverlap | Boolean | String | The strategy to use for resolving overlap of labels in gradient legends. If false , no overlap reduction is attempted. If set to true (default) or "parity" , a strategy of removing every other label is used. If set to "greedy" , a linear scan of the labels is performed, removing any label that overlaps with the last visible label. |
labelSeparation | Number | The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default 0 ). This property is ignored if labelOverlap resolution is not enabled. ≥ 5.0 |
legendX | Number | The pixel x-coordinate of the legend group. Only applied if the orient value is "none" . ≥ 5.4 |
legendY | Number | The pixel y-coordinate of the legend group. Only applied if the orient value is "none" . ≥ 5.4 |
symbolDash | Number[ ] | Stroke dash of symbol outlines (or [] for solid lines). ≥ 5.0 |
symbolDashOffset | Number | The pixel offset at which to start the symbol dash array. ≥ 5.0 |
symbolFillColor | Color | Fill color for legend symbols. |
symbolLimit | Number | The maximum number of allowed entries for a symbol legend. If the number of entries exceeds the limit, entries will be dropped and replaced with an ellipsis. ≥ 5.7 |
symbolOffset | Number | Horizontal pixel offset for legend symbols. |
symbolOpacity | Number | Opacity of legend symbols. ≥ 4.1 |
symbolSize | Number | Default symbol area size (in pixels2). |
symbolStrokeColor | Color | Stroke color for legend symbols. |
symbolStrokeWidth | Number | Default legend symbol stroke width. |
symbolType | String | Default symbol mark shape type (such as "circle" ) for legend symbols. |
tickCount | Number | String | Object | The desired number of tick values for quantitative legends. For scales of type time or utc , the tick count can instead be a time interval specifier. Legal string values are "millisecond" , "second" , "minute" , "hour" , "day" , "week" , "month" , and "year" . Alternatively, an object-valued interval specifier of the form {"interval": "month", "step": 3} includes a desired number of interval steps. Here, ticks are generated for each quarter (Jan, Apr, Jul, Oct) boundary. |
tickMinStep | Number | The minimum desired step between tick values for quantitative legends, in terms of scale domain values. For example, a value of 1 indicates that ticks should not be less than 1 unit apart. If tickMinStep is specified, the tickCount value will be adjusted, if necessary, to enforce the minimum step value. ≥ 5.0 |
title | String | String[ ] | The title for the legend (none by default). For versions ≥ 5.7, a string array specifies a title with multiple lines of text. |
titleAnchor | String | The anchor position for placing the legend title. One of "start" , "middle" , "end" , or null (default, for automatic determination). For example, with a titleOrient of "top" these anchor positions map to a left-, center-, or right-aligned title relative to the legend contents. ≥ 5.0 |
titleAlign | String | Horizontal text alignment of the legend title. One of "left" , "center" , or "right" . If specified, this value overrides automatic alignment based on the titleOrient and titleAnchor values. |
titleBaseline | String | Vertical text baseline of the legend title. One of alphabetic (default), top , middle , bottom , line-top , or line-bottom . The line-top and line-bottom values ≥ 5.10 operate similarly to top and bottom , but are calculated relative to the lineHeight rather than fontSize alone. If specified, this value overrides the automatic baseline based on the titleOrient and titleAnchor values. |
titleColor | Color | Text color of the legend title. |
titleFont | String | Font name of the legend title. |
titleFontSize | Number | Font size in pixels of the legend title. |
titleFontStyle | String | Font style of the legend title (e.g., normal or italic ). ≥ 5.0 |
titleFontWeight | String | Number | Font weight of the legend title. |
titleLimit | Number | The maximum allowed length in pixels of the legend title. |
titleLineHeight | Number | Line height in pixels for multi-line title text or title text with "line-top" or "line-bottom" baseline. ≥ 5.7 |
titleOpacity | Number | Opacity of the legend title. ≥ 4.1 |
titleOrient | String | The orientation of the title legend, determining where it is placed relative to the legend contents. One of "top" (default), "left" , "bottom" , or "right" . ≥ 5.0 |
titlePadding | Number | Value | The padding between the legend title and entries. |
values | Array | Explicitly set the visible legend values. The array entries should be legal values in the backing scale domain. |
zindex | Number | The integer z-index indicating the layering of the legend group relative to other axis, mark, and legend groups. The default value is 0 . |
Accessibility Properties ≥ 5.11
Accessibility properties are used to determine ARIA (Accessible Rich Internet Applications) attributes when using Vega to render SVG output.
Property | Type | Description |
---|---|---|
aria | Boolean | A boolean flag (default true ) indicating if ARIA attributes should be included (SVG output only). If false , the “aria-hidden” attribute will be set on the output SVG group, removing the legend from the ARIA accessibility tree. |
description | String | A text description of this legend for ARIA accessibility (SVG output only). If the aria property is true , for SVG output the “aria-label” attribute will be set to this description. If the description is unspecified it will be automatically generated. |
Themes and Configuration
To create themes, new default values for legend properties can be set using a config object. The config object also supports customized layout behavior for collections of legends with the same orient value.
Legend Orientation Reference
Valid settings for the legend orient parameter.
Value | Description |
---|---|
left |
Place the legend to the left of the chart. |
right |
Place the legend to the right of the chart. |
top |
Place the legend above the top of the chart. |
bottom |
Place the legend below the bottom of the chart. |
top-left |
Place the legend inside the upper left corner of the chart. |
top-right |
Place the legend inside the upper right corner of the chart. |
bottom-left |
Place the legend inside the lower left corner of the chart. |
bottom-right |
Place the legend inside the lower right corner of the chart. |
none |
Do not perform automatic layout. Allows custom layout by setting the legendX and legendY properties of the legend. |
Multiple legends: If multiple legends have a left
or right
orientation, they will be vertically ordered by default. If multiple legends have a top
or bottom
orientation, they will be horizontally ordered by default. In all other cases, legends will be drawn on top of each other when placed in the same location. The multiple legend layout can be customized by setting the legend layout config.
Legend offset: In the case of left
, right
, top
and bottom
orientation, the offset parameter determines how far away the legend is placed from the rest of the chart. If the orientation is none
, the offset parameter is ignored. For all other settings, the offset determines the distance the legend is moved inward from a corner of the data rectangle.
Custom Legend Encodings
Custom mark properties can be set for all legend elements using the encode parameter. The addressable elements are:
legend
for the legend group mark,title
for the title text mark,labels
for label text marks,symbols
for legend symbol marks,entries
for symbol legend group marks containing a symbol / label pair, andgradient
for a gradient rect marks: one rect with gradient fill for continuous gradient legends, multiple rect marks with solid fill for discrete gradient legends.
Each element accepts a set of visual encoding directives grouped into enter
, update
, exit
, etc. objects as described in the Marks documentation. Mark properties can be styled using standard value references.
In addition, each encode block may include a string-valued name
property to assign a unique name to the mark set, a boolean-valued interactive
property to enable input event handling, and a string-valued (or array-valued) style
property to apply default property values. Unless otherwise specified, title elements use a default style of "guide-title"
and labels elements use a default style of "guide-label"
.
Each legend symbol and label instance is backed by a data object with the following fields, which may be accessed as part of a custom visual encoding rule:
index
- an integer indexlabel
- the string labelvalue
- the data valuesize
- the symbol size (for symbol legends only)
The following example shows how to set custom fonts and a border on a legend for a fill color encoding. The labels
encoding block also make legend labels responsive to input events, and changes the text color on mouse hover.
"legends": [
{
"fill": "color",
"encode": {
"title": {
"update": {
"fontSize": {"value": 14}
}
},
"labels": {
"interactive": true,
"update": {
"fontSize": {"value": 12},
"fill": {"value": "black"}
},
"hover": {
"fill": {"value": "firebrick"}
}
},
"symbols": {
"update": {
"stroke": {"value": "transparent"}
}
},
"legend": {
"update": {
"stroke": {"value": "#ccc"},
"strokeWidth": {"value": 1.5}
}
}
}
}
]
Custom text can be defined using the text
property for labels
. For example, one could define an ordinal scale that serves as a lookup table from a backing value
to legend label text. Note: to perform custom positioning when orient is none
, use the top-level legendX and legendY properties, do not use x
and y
properties within a custom encoding block.