Skip to content
daisyBlazor

WaffleChart

Parts of a whole as a 10 × 10 grid where each cell is 1 %, such as seats by status. Shares are rounded so the cells always add up. D3 computes the layout.
Composition and progress
Cover · <WaffleChart>
Waffle chartActive: 412 (68.7%); Invited: 96 (16%) (of 600)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Active: 412 (68.7%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Invited: 96 (16%)Rest: 92Rest: 92Rest: 92Rest: 92Rest: 92Rest: 92Rest: 92Rest: 92Rest: 92Rest: 92Rest: 92Rest: 92Rest: 92Rest: 92Rest: 92

Examples

Basic

The items fill the grid row by row in the order given; the legend shows each share.

Seats by status
Seats by statusActive: 412 seats (68.7%); Invited: 96 seats (16%); Suspended: 22 seats (3.7%); Unassigned: 70 seats (11.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Suspended: 22 seats (3.7%)Suspended: 22 seats (3.7%)Suspended: 22 seats (3.7%)Suspended: 22 seats (3.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)
Active 68.7% Invited 16% Suspended 3.7% Unassigned 11.7%
website/Examples/Charts/WaffleChartBasicExample.razor Source

Out of a total

Total larger than the sum leaves the remaining cells empty; Rows and Columns change the grid (5 × 20 here).

Active seats of 600 licensed
Active seats of 600 licensedActive: 412 seats (68.7%); Invited: 96 seats (16%) (of 600 seats)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Rest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seatsRest: 92 seats
Active 68.7% Invited 16%
website/Examples/Charts/WaffleChartTotalExample.razor Source

Playground

Seats by status
Seats by statusActive: 412 seats (68.7%); Invited: 96 seats (16%); Suspended: 22 seats (3.7%); Unassigned: 70 seats (11.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Active: 412 seats (68.7%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Invited: 96 seats (16%)Suspended: 22 seats (3.7%)Suspended: 22 seats (3.7%)Suspended: 22 seats (3.7%)Suspended: 22 seats (3.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)Unassigned: 70 seats (11.7%)
Active 68.7% Invited 16% Suspended 3.7% Unassigned 11.7%
<WaffleChart
             ValueFormat="{0:N0} seats"
             Title="Seats by status"
             Data="@_seats" />

@code {
    private readonly ChartDataPoint[] _seats =
    [
        new("Active", 412),
        new("Invited", 96),
        new("Suspended", 22),
        new("Unassigned", 70),
    ];
}

API

<WaffleChart>

DaisyBlazor.Charts

Parameters

  • AspectRatio double
    = 1

    Width divided by height. The chart keeps this shape at any width; its text keeps its size.

  • Columns int
    = 10

    Number of cells per row.

  • Data IReadOnlyList<ChartDataPoint>
    = []

    The parts of the whole, filled in this order. Only positive values count; a point's Color overrides the palette.

  • EmptyColor string
    = "var(--color-base-content)"

    CSS colour of the empty cells (drawn faint).

  • Gap double
    = 6

    Gap between cells, in chart units.

  • RowHeight double?
    = null

    Height of each row in px, for a chart that lays its categories out as rows (horizontal bars, a Gantt's lanes, a heatmap's rows…): its height then follows its number of rows instead of AspectRatio, so a long list keeps readable rows at any width. A chart, or an orientation, without rows ignores it.

  • Rows int
    = 10

    Number of rows of cells.

  • ShowLegend bool
    = true

    Show each part's colour and share under the grid.

  • ShowTitle bool
    = true

    Draw Title as a visible heading above the chart (the default); false keeps it only as the chart's accessible name, for a chart inside a card that already has a heading.

  • Title string
    = null

    Optional heading rendered above the chart; it is also the chart's accessible name.

  • Total double?
    = null

    The whole. When it is larger than the sum of the items, the remaining cells stay empty; by default the items fill the grid.

  • ValueFormat string
    = "{0:#,0.##}"

    Format string for values in tooltips.

  • Width string
    = "100%"

    CSS width of the chart wrapper.

  • Class string
    = null

    Additional CSS classes merged onto the w-full wrapper.

  • Style string
    = null

    Inline styles appended after the width on the wrapper.

Something went wrong while running the docs. Reload