Skip to content

Bubble Chart

Bubbles for x, y, size and category: area encodes size on a square-root scale and each category is a step on the grey ladder.

$149 once · every Pro piece

Customize

Labels never collide: a label sits inside its bubble when it fits, otherwise to the right, left, above or below, otherwise it is left out. Switch periods and every bubble glides to its new place and size over 500ms, leaving a dashed ash ring where it was that cools away, so you see what moved. Hovering lights one bubble in the accent and keeps its category forward while the others step back; an optional size-weighted trend line fades at both ends and re-fits when categories are hidden.

Install

npx shadcn@latest add @obsyde/bubble-chart

Needs your licence key · Get Pro

Usage

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

import { BubbleChart } from '@/components/obsyde/ember/bubble-chart/BubbleChart';

export function Example() {
  return (
    <BubbleChart />
  );
}

Files

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

  • ember/bubble-chart/BubbleChart.tsxcomponent
  • ember/bubble-chart/bubble-chart.cssstyles
  • ember/bubble-chart/BubbleChartDemo.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'
periodPeriod'first' | 'second''first'
bubblesBubblesnumber18
labelsLabelsbooleantrue
trendTrend'none' | 'dashed' | 'gradient''none'
ghostMorph ghostsbooleantrue
legendLegend'row' | 'none''row'
tooltipTooltip'panel' | 'none''panel'
patternPattern'none' | 'diagonal-up' | 'diagonal-down' | 'dots' | 'vertical' | 'crosshatch''none'
backgroundBackground'grid' | 'dots' | 'hatch' | 'none''grid'
revealReveal'grow' | 'none''grow'
statusStatus'ready' | 'loading' | 'empty''ready'
heightHeightnumber320
seedSeednumber8