Brushing
Brushing in a component is handled in two ways: trigger and consume.
Observe actions on the component
trigger controls how the component reacts to various user actions like
‘tapping on a shape’:
on: type of interaction to react toaction: type of action to respond with. Optionalcontexts: name of the brushing contexts to affectdata: the mapped data properties to add to the brush. Optionalpropagation: control the event propagation when multiple shapes are tapped. Disabled by default. OptionalglobalPropagation: control the event propagation between components. Disabled by default. OptionaltouchRadius: extend contact area for tap events. Disabled by default. OptionalmouseRadius: extend contact area for regular mouse events. Disabled by default. Optional
trigger: [{ on: 'tap', action: 'toggle', contexts: ['selection', 'tooltip'], data: ['x'], propagation: 'stop', // 'stop' => prevent trigger from propagating further than the first shape globalPropagation: 'stop', // 'stop' => prevent trigger of same type to be triggered on other components touchRadius: 24, mouseRadius: 10}],Observe changes of a brush context
consume controls how the component uses active brushes.
context: name of the brush context to observedata: the mapped data properties to observe. Optionalmode: data properties operator:and,or,xor. Optionalfilter: a filtering function. Optionalstyle: the style to apply to the shapes of the componentactive: the style of active data pointsinactive: the style of inactive data points
consume: [ { context: "selection", data: ["x"], filter: (shape) => shape.type === "circle", style: { active: { fill: "red", stroke: "#333", strokeWidth: (shape) => shape.strokeWidth * 2, }, inactive: {}, }, },];Programmatic changes
Brushes can be controlled programmatically by accessing a certain brush from the picasso instance:
const pic = picasso.chart(...);const highlighter = pic.brush('highlight'); // get brush instancehighlighter.addValue('products', 'Bike'); // highlight 'Bike'when addValue is called, components that are consuming the highlight
brushing context reacts automatically and apply the specified style.
Brushing and linking
All components using a trigger or consume configuration is automatically
linked within the same chart. To link brushes from two different
chart instances, use link:
const scatter = picasso.chart(/* */);const bars = picasso.chart(/* */);scatter.brush("select").link(bars.brush("highlight"));Now, whenever a value is brushed in the scatter instance, the same values is
also brushed in the bars instance:
Examples
Scenario: tapping on a data point in a component should activate a brush called highlight, add the relevant data to the brush, and finally highlight the point in the component.
{ type: 'point', data: {...}, settings: {...}, brush: { trigger: [{ on: 'tap', contexts: ['highlight'] }], consume: [{ context: 'highlight', style: { inactive: { opacity: 0.3 } } }] }}To make the component react to a tap, a trigger is added with an on of
type 'tap', and 'highlight' as brush contexts that should be affected.
To have the component listen to brush changes and update itself, a consume
object is added with the name of the context to observe.