Skip to content

Beeswarm

A deterministic swarm plot: every sample is a dot on the value axis, nudged up or down just enough not to touch its neighbours, so the outline of each swarm is the distribution and every point can still be pointed at.

$149 once · every Pro piece

Customize

Switch the grouping (all, by region, by tier) and each dot flies to its new swarm on its own spring, leaving in value order so the population visibly re-sorts. The pointer snaps to the nearest dot rather than the nearest x: it lifts and lights in the accent while the other groups step back, optionally blurring out of focus. Dashed median ticks cross each swarm; the legend isolates and hides groups; ←/→ walk the dots in value order.

Install

npx shadcn@latest add @obsyde/beeswarm

Needs your licence key · Get Pro

Usage

Import it from where the CLI puts it, or copy the files below by hand.

import { Beeswarm } from '@/components/obsyde/ember/beeswarm/Beeswarm';

export function Example() {
  return (
    <Beeswarm by="group" />
  );
}

Files

What you get with Pro: plain React, TypeScript and CSS, with no dependencies.

  • ember/beeswarm/Beeswarm.tsxcomponent
  • ember/beeswarm/beeswarm.cssstyles
  • ember/beeswarm/BeeswarmDemo.tsxdemo
  • ember/viz-kit/viz-kit.cssshared
  • ember/viz-kit/Tooltip.tsxshared
  • ember/viz-kit/focus.tsshared
  • ember/viz-kit/patterns.tsxshared
  • ember/viz-kit/roll.tsshared
  • ember/shared/rolling-number.cssshared
  • ember/shared/spring.tsshared
  • ember/shared/accent.tsshared
  • ember/viz-kit/scale.tsshared
  • ember/viz-kit/motion.tsshared
  • ember/viz-kit/chart.tsxshared
  • ember/shared/ember.cssshared
  • ember/viz-kit/touch.tsshared
  • ember/viz-kit/keyboard.tsshared
  • ember/viz-kit/size.tsshared
  • ember/viz-kit/States.tsxshared
  • ember/viz-kit/shape.tsshared
  • ember/viz-kit/Legend.tsxshared
  • ember/viz-kit/Grid.tsxshared
  • ember/viz-kit/demo.tsxshared
  • ember/viz-kit/demo.cssshared
  • ember/viz-kit/Axis.tsxshared

API

PropTypeDefault
accentAccent'ember' | 'volt' | 'arc''ember'
byGroup by'group' | 'tier' | 'none''group'
pointsPointsnumber220
radiusRadiusnumber4
blurBlur inactivebooleanfalse
medianMediansbooleantrue
legendLegend'row' | 'none''row'
tooltipTooltip'panel' | 'none''panel'
backgroundBackground'grid' | 'dots' | 'hatch' | 'none''grid'
revealReveal'sweep' | 'none''sweep'
statusStatus'ready' | 'loading' | 'empty''ready'
heightHeightnumber300
seedSeednumber5