The guide is being migrated; some links to the API reference may be missing. Use the search bar in the API reference.

CartesianMarker

Overview

CartesianMarkers highlight points on CartesianCharts. There are two types of CartesianMarker:

  • Standard CartesianMarkers are shown on tap. Add these via the marker parameter of rememberCartesianChart.

  • Persistent CartesianMarkers are shown permanently at given x-values. Add these via the persistentMarkers parameter of rememberCartesianChart.

There are two ways of creating a CartesianMarker:

  • using DefaultCartesianMarker, described below

  • implementing the interface

DefaultCartesianMarker

A common means of creating CartesianMarkers is DefaultCartesianMarker, instantiated via rememberDefaultCartesianMarker. It accepts three main components—a label, a point indicator, and a vertical line—and offers several customization options.

A DefaultCartesianMarker’s label text is created by its DefaultCartesianMarker.ValueFormatter. A dedicated formatting contract is required here because CartesianMarkers can highlight multiple points at once. The general principle is the same as with CartesianValueFormatter, but the required information must first be retrieved from targets.

A base DefaultCartesianMarker.ValueFormatter implementation can be instantiated via DefaultCartesianMarker.ValueFormatter.default. This implementation uses DecimalFormat to format y-values. You can provide a custom DecimalFormat instance and toggle the color-coding of y-values. The former enables you not only to change how the y-values themselves are formatted, but also to add prefixes and suffixes.

DefaultCartesianMarker is open for subclassing.

CartesianMarkerVisibilityListener

You can listen for visibility changes of standard CartesianMarkers via CartesianMarkerVisibilityListener.

CartesianMarker.Target

CartesianMarkers use CartesianMarker.Targets, which hold information on the highlighted points. They are stored in lists (called targets), since several points may be highlighted at once.

CartesianMarker.Targets itself includes only general properties. More data is found in its subtypes, each of which corresponds to a CartesianLayer: CandlestickCartesianLayerMarkerTarget, ColumnCartesianLayerMarkerTarget, and LineCartesianLayerMarkerTarget.

In general, you should take the following approach when working with targets:

  • If you know that only one point can be highlighted at once, use targets.first(). (This occurs when each point has a unique pixel x-coordinate—for example, when only a single-series LineCartesianLayerMarkerTarget is present.) Otherwise, iterate targets.

  • If you know that only one kind of CartesianMarker.Target is present, use casting. (This occurs when only one kind of CartesianLayer is in use.) Otherwise, use type checking (when with is).