Skip to main content
twblazor
Home
  • Get started
  • Tailwind with Blazor
  • Why twblazor?
  • Theme
  • Class Merge
    • Configuring localization
    • RTL Provider
  • Breadcrumb
  • Card
  • Carousel
  • Collapse
  • Footer
  • MenuNew
  • Navbar
  • On This PageNew
  • Sidebar
  • Stepper
  • Tabs
  • Tree List
  • Button
  • Checkbox
  • Color Picker
    • Date
    • Date Range
    • Datetime
    • Datetime Range
    • Time
    • Time Range
  • File Upload
  • NumericNew
  • Radio Button
  • RatingNew
  • Select
  • Slider
  • Switch
  • Textfield
  • Alert
  • Avatar
  • Chip
  • Icon
  • Progress
  • Skeleton
  • Spinner
  • TooltipNew
  • Data Table
  • Pagination
  • Pick List
  • BarcodeNew
  • QR CodeNew
  • CalendarNew
  • Table
  • Overview
  • Area
  • Bar
  • Box Plot
  • Bullet
  • Bump
  • Candlestick
  • Column
  • Dot Plot
  • Dumbbell
  • Funnel
  • Gantt
  • Gauge
  • Heatmap
  • Histogram
  • Icon
  • Line
  • Lollipop
  • Matrix
  • Nightingale
  • Parallel Coordinates
  • Pie
  • Quadrant
  • Radar
  • Radial Bar
  • Range
  • Scatter
  • Slope
  • Small Multiples
  • Strip Plot
  • Treemap
  • Waffle
  • Waterfall
  • Arc Diagram
  • Barcode
  • Beeswarm
  • Bump Area
  • Categorical Scatter
  • Chord Diagram
  • Circular Treemap
  • Contour
  • Convex Treemap
  • Density Plot
  • Dendrogram
  • Euler Diagram
  • Flowchart
  • Hexagonal Binning
  • Horizon
  • Marimekko
  • Network Diagram
  • Radial Histogram
  • Ridgeline
  • Sankey
  • Stream Graph
  • Sunburst
  • Venn Diagram
  • Violin Plot
  • Word Cloud
  • Dialog Service
  • Toast Service
API DocumentationAI Agents & Skills
Home Get Started

Charts

TwBeeswarmChart

TwBeeswarmChart is a Blazor beeswarm chart that draws every observation as a dot, nudged sideways so none overlap.

Last updated 18 October 2026

Please be aware this component is new, may have bugs and/or be subject to change. Please report any bugs at https://github.com/twblazor/twblazor/issues.

Basic usage

TwBeeswarmChart draws every value in a ChartSample as a dot along the value axis and moves each one sideways just far enough to clear its neighbors. The swarm widens where values cluster, so you see both the spread and how many values sit at each level.
Customer satisfaction by planScore out of 10
246810
246810
FreeCount 14Minimum 3Lower quartile 5.25Median 6.5Upper quartile 7Maximum 9
TeamCount 12Minimum 5Lower quartile 7Median 8Upper quartile 9Maximum 10
EnterpriseCount 11Minimum 6Lower quartile 8Median 9Upper quartile 9.5Maximum 10
FreeTeamEnterprise
RAZOR
<TwChart Title="Customer satisfaction by plan" Description="Score out of 10">
    <TwBeeswarmChart Samples="@_plans" />
</TwChart>
CSHARP
@code {
    private readonly ChartSample[] _plans =
    [
        new("Free", [3, 4, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 9]),
        new("Team", [5, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10]),
        new("Enterprise", [6, 7, 8, 8, 9, 9, 9, 9, 10, 10, 10])
    ];
}

Clusters and outliers

Because no dot is hidden behind another, repeated values and stragglers are both easy to spot. Here most builds finish in about four minutes, with a handful of slow ones on the main branch.
Build duration by branchMinutes
2.0 min4.0 min6.0 min8.0 min10.0 min12.0 min
2.0 min4.0 min6.0 min8.0 min10.0 min12.0 min
mainCount 16Minimum 3.8 minLower quartile 4.1 minMedian 4.2 minUpper quartile 4.5 minMaximum 11.2 min
releaseCount 10Minimum 4.4 minLower quartile 4.6 minMedian 4.8 minUpper quartile 4.9 minMaximum 5.2 min
featureCount 12Minimum 2.9 minLower quartile 3.4 minMedian 3.8 minUpper quartile 4.5 minMaximum 6.1 min
mainreleasefeature
RAZOR
<TwChart Title="Build duration by branch" Description="Minutes">
    <TwBeeswarmChart Samples="@_builds" LabelHeader="Branch" ValueFormat="0.0 min" Height="ChartHeight.Large" />
</TwChart>
CSHARP
@code {
    private readonly ChartSample[] _builds =
    [
        new("main", [3.8, 3.9, 4.0, 4.0, 4.1, 4.1, 4.1, 4.2, 4.2, 4.3, 4.3, 4.4, 4.6, 7.9, 8.4, 11.2]),
        new("release", [4.4, 4.5, 4.6, 4.6, 4.7, 4.8, 4.8, 4.9, 5.0, 5.2]),
        new("feature", [2.9, 3.1, 3.3, 3.4, 3.6, 3.7, 3.9, 4.0, 4.4, 4.9, 5.5, 6.1])
    ];
}

Horizontal

Set Horizontal to list the groups down the side with values running left to right.
Customer satisfaction by plan
FreeTeamEnterprise
FreeTeamEnterprise
FreeCount 14Minimum 3Lower quartile 5.25Median 6.5Upper quartile 7Maximum 9
TeamCount 12Minimum 5Lower quartile 7Median 8Upper quartile 9Maximum 10
EnterpriseCount 11Minimum 6Lower quartile 8Median 9Upper quartile 9.5Maximum 10
246810
RAZOR
<TwChart Title="Customer satisfaction by plan">
    <TwBeeswarmChart Samples="@_plans" Horizontal="true" />
</TwChart>

When to use

A beeswarm suits tens of values per group. A cluster too large for its group's slot overlaps at the edges, so for hundreds of values prefer TwViolinPlotChart or TwBoxPlotChart.

Summary

Tooltips and the table view give the count, minimum, lower quartile, median, upper quartile and maximum of each group.

Shared features

The legend, tooltips, keyboard navigation, table view, value formatting, height and empty state work the same on every chart. See TwChart for those options.

Keyboard navigation

The plot is a single Tab stop. Each data point is announced with its series and value as focus reaches it, and the table view presents the same data without the plot.
Key What it does
Tab Moves focus into the plot, onto the data point last visited.
Arrow Right or Arrow Down Moves to the next data point.
Arrow Left or Arrow Up Moves to the previous data point.
Home or End Moves to the first or last data point.
Escape Hides the tooltip of the focused data point.
Enter or Space On a legend item: shows or hides that series. On the table button: switches between the chart and its data table.

On this page

  • Basic usage
  • Clusters and outliers
  • Horizontal
  • When to use
  • Summary
  • Shared features
  • Keyboard navigation
Discord (opens in a new tab) • GitHub (opens in a new tab) • Documentation (opens in a new tab) • MIT License (opens in a new tab) • llms.txt (opens in a new tab)

twblazor is and always will be free and open source.

An unhandled error has occurred. Reload