Skip to content

Legend - Sequential

The Sequential legend can represent sequential data mapped to a color range.

Data and scales

The legend component doesn’t take any data as input directly, instead the data is implicitly fetched from the referenced scales.

There are two required scales, a fill scale and a major scale. The fill scale represent the color range, via a sequential color scale, and major is the numerical representation, via a linear scale.

Layout

The legend can be laid out in two directions; horizontal and vertical. The direction is dependent on the docking area, top and bottom are horizontal and left and right are vertical.

Horizontal layout:

Example of a legend with horizontal layout

Vertical layout:

Example of a legend with vertical layout

Custom labels

Custom labels can be configured using a ticks function. The ticks function is evaluated for each tick (start and stop) and expects a string value to be returned.

{
  type: 'legend-seq',
  settings: {
    fill: 'sequential-color-scale',
    major: 'linear-scale',
    tick: {
      label: (tickValue, index) => {
        const temp = ['Hot', 'Cold'];
        return temp[index % 2];
      },
    }
  }
}
Example of a legend with custom labels

Formatting

Label formatting is derived from the major scale and the data itself. But as with any component, it is possible to reference a custom formatter using the formatter property.

{
  type: 'legend-seq',
  formatter: {
    formatter: 'd3', // The type of formatter to use
    type: 'number', // The type of data to format
    format: '-1.0%' // Format pattern
  }
}

Interaction

There is no direct way to configure interactions, instead it is done via other components, such as the brush-range.

Enable range selection

To enable range selection, two scene nodes are exposed that can be referenced, via a CSS selector, by the brush-range component as a target.

This reference enables the brush-range component to limit the target area to a sub-area of the legends dock area.

chartSettings = {
  interactions: [
    ... // Setup required brush-range interactions here.
  ],
  scales: {
    'sequential-color-scale': { source: '0/1', type: 'color' },
    'linear-scale': { source: '0/1', type: 'linear' },
  },
  components: [
    {
      type: 'legend-seq',
      layout: {
        dock: 'right',
      },
      key: 'myLegend' // Reference by the brush-range component,
      settings: {
        fill: 'sequential-color-scale',
        major: 'linear-scale'
      }
    },
    {
      type: 'brush-range',
      key: 'myBrushRange',
      layout: {
        dock: '@myLegend', // Legend reference
      },
      settings: {
        brush: 'highlight',
        scale: 'linear-scale',
        direction: 'vertical',
        bubbles: {
          align: 'start',
          placement: 'outside' // Render bubbles outside the legends dock area
        },
        target: {
          selector: '[id="legend-seq-target"]', // Define the target area. Must reference a node from @myLegend
          fillSelector: '[id="legend-seq-ticks"]', // Define the target fill area. Must reference a node from @myLegend
          fill: 'rgba(82,204,82,0.3)',
        }
      },
  }]
}

API Reference

For more details, see the API.

Was this page helpful?