Skip to content
daisyBlazor

PolarChart

Points at a numeric angle and radius, drawn as lines, splines, filled areas or markers over circular radius gridlines and angle spokes. The angle axis is any full turn: degrees, the 24 hours of a day, the months of a year. Tooltips give each point's angle and radius.
Specialised
Cover · <PolarChart>
Polar chartp95: 00h 118, 02h 106, 04h 108, 06h 146, 08h 214, 10h 241, 12h 232, 14h 244, 16h 226, 18h 184, 20h 152, 22h 131p95p95, 00h: 118p95, 02h: 106p95, 04h: 108p95, 06h: 146p95, 08h: 214p95, 10h: 241p95, 12h: 232p95, 14h: 244p95, 16h: 226p95, 18h: 184p95, 20h: 152p95, 22h: 13110020000h06h12h18h

Examples

Basic

Each PolarSeries holds PolarPoint values (angle, radius). AngleMax="24" makes a full turn a day, AngleStep spaces the spokes and AngleFormat writes their labels; Closed joins the last point back to the first.

API latency by hour of day (UTC)
API latency by hour of day (UTC)p95: 00:00 118 ms, 01:00 112 ms, 02:00 106 ms, 03:00 104 ms, 04:00 108 ms, 05:00 121 ms, 06:00 146 ms, 07:00 182 ms, 08:00 214 ms, 09:00 236 ms, 10:00 241 ms, 11:00 238 ms, 12:00 232 ms, 13:00 236 ms, 14:00 244 ms, 15:00 239 ms, 16:00 226 ms, 17:00 205 ms, 18:00 184 ms, 19:00 168 ms, 20:00 152 ms, 21:00 140 ms, 22:00 131 ms, 23:00 124 ms; p50: 00:00 42 ms, 01:00 40 ms, 02:00 38 ms, 03:00 37 ms, 04:00 39 ms, 05:00 44 ms, 06:00 53 ms, 07:00 66 ms, 08:00 78 ms, 09:00 86 ms, 10:00 88 ms, 11:00 87 ms, 12:00 84 ms, 13:00 86 ms, 14:00 89 ms, 15:00 87 ms, 16:00 82 ms, 17:00 74 ms, 18:00 66 ms, 19:00 60 ms, 20:00 55 ms, 21:00 51 ms, 22:00 47 ms, 23:00 44 msp95p95, 00:00: 118 msp95, 01:00: 112 msp95, 02:00: 106 msp95, 03:00: 104 msp95, 04:00: 108 msp95, 05:00: 121 msp95, 06:00: 146 msp95, 07:00: 182 msp95, 08:00: 214 msp95, 09:00: 236 msp95, 10:00: 241 msp95, 11:00: 238 msp95, 12:00: 232 msp95, 13:00: 236 msp95, 14:00: 244 msp95, 15:00: 239 msp95, 16:00: 226 msp95, 17:00: 205 msp95, 18:00: 184 msp95, 19:00: 168 msp95, 20:00: 152 msp95, 21:00: 140 msp95, 22:00: 131 msp95, 23:00: 124 msp50p50, 00:00: 42 msp50, 01:00: 40 msp50, 02:00: 38 msp50, 03:00: 37 msp50, 04:00: 39 msp50, 05:00: 44 msp50, 06:00: 53 msp50, 07:00: 66 msp50, 08:00: 78 msp50, 09:00: 86 msp50, 10:00: 88 msp50, 11:00: 87 msp50, 12:00: 84 msp50, 13:00: 86 msp50, 14:00: 89 msp50, 15:00: 87 msp50, 16:00: 82 msp50, 17:00: 74 msp50, 18:00: 66 msp50, 19:00: 60 msp50, 20:00: 55 msp50, 21:00: 51 msp50, 22:00: 47 msp50, 23:00: 44 ms5010015020000:0003:0006:0009:0012:0015:0018:0021:00
p95 p50
website/Examples/Charts/PolarChartBasicExample.razor Source

Areas and splines

Mode="PolarChartMode.Area" fills each series (Marker draws dots only) and Smooth turns the lines into splines. StartAngle and Clockwise move and turn the angle axis.

Edge requests by compass bearing of the client region (thousands)
Edge requests by compass bearing of the client region (thousands)Weekdays: 0° 42 k, 45° 58 k, 90° 71 k, 135° 36 k, 180° 28 k, 225° 33 k, 270° 96 k, 315° 64 k; Weekends: 0° 25 k, 45° 31 k, 90° 44 k, 135° 22 k, 180° 19 k, 225° 21 k, 270° 57 k, 315° 38 kWeekdaysWeekdays, 0°: 42 kWeekdays, 45°: 58 kWeekdays, 90°: 71 kWeekdays, 135°: 36 kWeekdays, 180°: 28 kWeekdays, 225°: 33 kWeekdays, 270°: 96 kWeekdays, 315°: 64 kWeekendsWeekends, 0°: 25 kWeekends, 45°: 31 kWeekends, 90°: 44 kWeekends, 135°: 22 kWeekends, 180°: 19 kWeekends, 225°: 21 kWeekends, 270°: 57 kWeekends, 315°: 38 k204060800°45°90°135°180°225°270°315°
Weekdays Weekends
website/Examples/Charts/PolarChartAreaExample.razor Source

Stacked

Stacked="true" draws each series on top of the running total of the series before it at the same angle; with Mode="PolarChartMode.Area" each fills the band between the two totals. Percent="true" makes each angle's total 100%. Tooltips keep each point's own value and add the total and its share.

API requests by hour, stacked by plan (thousands)
API requests by hour, stacked by plan (thousands)Free: 00h 22 k, 03h 14 k, 06h 18 k, 09h 41 k, 12h 58 k, 15h 52 k, 18h 47 k, 21h 35 k; Pro: 00h 12 k, 03h 8 k, 06h 15 k, 09h 44 k, 12h 61 k, 15h 66 k, 18h 49 k, 21h 24 k; Enterprise: 00h 6 k, 03h 5 k, 06h 11 k, 09h 38 k, 12h 57 k, 15h 60 k, 18h 31 k, 21h 12 kFreeFree, 00h: 22 k (total 40 k, 55%)Free, 03h: 14 k (total 27 k, 51.9%)Free, 06h: 18 k (total 44 k, 40.9%)Free, 09h: 41 k (total 123 k, 33.3%)Free, 12h: 58 k (total 176 k, 33%)Free, 15h: 52 k (total 178 k, 29.2%)Free, 18h: 47 k (total 127 k, 37%)Free, 21h: 35 k (total 71 k, 49.3%)ProPro, 00h: 12 k (total 40 k, 30%)Pro, 03h: 8 k (total 27 k, 29.6%)Pro, 06h: 15 k (total 44 k, 34.1%)Pro, 09h: 44 k (total 123 k, 35.8%)Pro, 12h: 61 k (total 176 k, 34.7%)Pro, 15h: 66 k (total 178 k, 37.1%)Pro, 18h: 49 k (total 127 k, 38.6%)Pro, 21h: 24 k (total 71 k, 33.8%)EnterpriseEnterprise, 00h: 6 k (total 40 k, 15%)Enterprise, 03h: 5 k (total 27 k, 18.5%)Enterprise, 06h: 11 k (total 44 k, 25%)Enterprise, 09h: 38 k (total 123 k, 30.9%)Enterprise, 12h: 57 k (total 176 k, 32.4%)Enterprise, 15h: 60 k (total 178 k, 33.7%)Enterprise, 18h: 31 k (total 127 k, 24.4%)Enterprise, 21h: 12 k (total 71 k, 16.9%)5010015000h03h06h09h12h15h18h21h
Free Pro Enterprise
Share of API requests by hour
Share of API requests by hourFree: 00h 22 k, 03h 14 k, 06h 18 k, 09h 41 k, 12h 58 k, 15h 52 k, 18h 47 k, 21h 35 k; Pro: 00h 12 k, 03h 8 k, 06h 15 k, 09h 44 k, 12h 61 k, 15h 66 k, 18h 49 k, 21h 24 k; Enterprise: 00h 6 k, 03h 5 k, 06h 11 k, 09h 38 k, 12h 57 k, 15h 60 k, 18h 31 k, 21h 12 kFreeFree, 00h: 22 k (total 40 k, 55%)Free, 03h: 14 k (total 27 k, 51.9%)Free, 06h: 18 k (total 44 k, 40.9%)Free, 09h: 41 k (total 123 k, 33.3%)Free, 12h: 58 k (total 176 k, 33%)Free, 15h: 52 k (total 178 k, 29.2%)Free, 18h: 47 k (total 127 k, 37%)Free, 21h: 35 k (total 71 k, 49.3%)ProPro, 00h: 12 k (total 40 k, 30%)Pro, 03h: 8 k (total 27 k, 29.6%)Pro, 06h: 15 k (total 44 k, 34.1%)Pro, 09h: 44 k (total 123 k, 35.8%)Pro, 12h: 61 k (total 176 k, 34.7%)Pro, 15h: 66 k (total 178 k, 37.1%)Pro, 18h: 49 k (total 127 k, 38.6%)Pro, 21h: 24 k (total 71 k, 33.8%)EnterpriseEnterprise, 00h: 6 k (total 40 k, 15%)Enterprise, 03h: 5 k (total 27 k, 18.5%)Enterprise, 06h: 11 k (total 44 k, 25%)Enterprise, 09h: 38 k (total 123 k, 30.9%)Enterprise, 12h: 57 k (total 176 k, 32.4%)Enterprise, 15h: 60 k (total 178 k, 33.7%)Enterprise, 18h: 31 k (total 127 k, 24.4%)Enterprise, 21h: 12 k (total 71 k, 16.9%)2040608010000h03h06h09h12h15h18h21h
Free Pro Enterprise
website/Examples/Charts/PolarChartStackedExample.razor Source

Playground

API latency by hour of day (UTC)
API latency by hour of day (UTC)p95: 00:00 118 ms, 01:00 112 ms, 02:00 106 ms, 03:00 104 ms, 04:00 108 ms, 05:00 121 ms, 06:00 146 ms, 07:00 182 ms, 08:00 214 ms, 09:00 236 ms, 10:00 241 ms, 11:00 238 ms, 12:00 232 ms, 13:00 236 ms, 14:00 244 ms, 15:00 239 ms, 16:00 226 ms, 17:00 205 ms, 18:00 184 ms, 19:00 168 ms, 20:00 152 ms, 21:00 140 ms, 22:00 131 ms, 23:00 124 ms; p50: 00:00 42 ms, 01:00 40 ms, 02:00 38 ms, 03:00 37 ms, 04:00 39 ms, 05:00 44 ms, 06:00 53 ms, 07:00 66 ms, 08:00 78 ms, 09:00 86 ms, 10:00 88 ms, 11:00 87 ms, 12:00 84 ms, 13:00 86 ms, 14:00 89 ms, 15:00 87 ms, 16:00 82 ms, 17:00 74 ms, 18:00 66 ms, 19:00 60 ms, 20:00 55 ms, 21:00 51 ms, 22:00 47 ms, 23:00 44 msp95p95, 00:00: 118 msp95, 01:00: 112 msp95, 02:00: 106 msp95, 03:00: 104 msp95, 04:00: 108 msp95, 05:00: 121 msp95, 06:00: 146 msp95, 07:00: 182 msp95, 08:00: 214 msp95, 09:00: 236 msp95, 10:00: 241 msp95, 11:00: 238 msp95, 12:00: 232 msp95, 13:00: 236 msp95, 14:00: 244 msp95, 15:00: 239 msp95, 16:00: 226 msp95, 17:00: 205 msp95, 18:00: 184 msp95, 19:00: 168 msp95, 20:00: 152 msp95, 21:00: 140 msp95, 22:00: 131 msp95, 23:00: 124 msp50p50, 00:00: 42 msp50, 01:00: 40 msp50, 02:00: 38 msp50, 03:00: 37 msp50, 04:00: 39 msp50, 05:00: 44 msp50, 06:00: 53 msp50, 07:00: 66 msp50, 08:00: 78 msp50, 09:00: 86 msp50, 10:00: 88 msp50, 11:00: 87 msp50, 12:00: 84 msp50, 13:00: 86 msp50, 14:00: 89 msp50, 15:00: 87 msp50, 16:00: 82 msp50, 17:00: 74 msp50, 18:00: 66 msp50, 19:00: 60 msp50, 20:00: 55 msp50, 21:00: 51 msp50, 22:00: 47 msp50, 23:00: 44 ms5010015020000:0003:0006:0009:0012:0015:0018:0021:00
p95 p50
Mode PolarChartMode
<PolarChart
            Closed="true"
            AngleMax="24"
            AngleStep="3"
            AngleFormat="{0:00}:00"
            ValueFormat="{0:N0} ms"
            Title="API latency by hour of day (UTC)"
            Series="@_latency" />

@code {
    // p95 and p50 latency of the Acme Cloud API, one point per hour; Closed joins 23:00 back to 00:00.
    private static readonly double[] _p95 = [118, 112, 106, 104, 108, 121, 146, 182, 214, 236, 241, 238, 232, 236, 244, 239, 226, 205, 184, 168, 152, 140, 131, 124];
    private static readonly double[] _p50 = [42, 40, 38, 37, 39, 44, 53, 66, 78, 86, 88, 87, 84, 86, 89, 87, 82, 74, 66, 60, 55, 51, 47, 44];

    private readonly PolarSeries[] _latency =
    [
        new("p95", [.. _p95.Select((v, h) => new PolarPoint(h, v))]),
        new("p50", [.. _p50.Select((v, h) => new PolarPoint(h, v))]),
    ];
}

API

<PolarChart>

DaisyBlazor.Charts

Parameters

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

    Format string for angles on the spokes and in tooltips, e.g. "{0}°" or "{0:00}:00".

  • AngleMax double
    = 360

    The angle of a full turn: 360 for degrees (default), 24 for the hours of a day, 12 for months.

  • AngleStep double?
    = null

    Angle between the spokes and their labels, in angle units; null draws twelve (every 30° of 360, every 2 of 24).

  • AspectRatio double
    = 1

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

  • Clockwise bool
    = true

    Angles grow clockwise (default); false turns them anticlockwise, as in mathematics.

  • Closed bool
    = false

    Join each line's last point back to its first (areas are always closed).

  • Levels int
    = 4

    About how many radius rings to draw; the exact count follows nice tick values.

  • Mode PolarChartMode
    = PolarChartMode.Line

    Draw lines (default), filled areas or markers only.

  • Percent bool
    = false

    Stack the series to 100%: each angle's total fills the radius (implies Stacked).

  • 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.

  • Series IReadOnlyList<PolarSeries>
    = []

    The series of points to plot.

  • ShowLegend bool
    = true

    Show a legend when there is more than one series.

  • ShowPoints bool
    = true

    Draw a dot at each point in Line and Area mode (Marker mode always does).

  • 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.

  • Smooth bool
    = false

    Draw lines and areas as smooth splines through the points.

  • Stacked bool
    = false

    Stack the series: at each angle shared by several series, a point is drawn on top of the running total of the series before it; Area mode fills the band between that total and the new one. Tooltips keep each point's own value and add the angle's total and the point's share.

  • StartAngle double
    = 0

    Where angle 0 sits, in degrees clockwise from 12 o'clock.

  • Title string
    = null

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

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

    Format string for radii in tooltips and the description, e.g. "{0:N0} ms".

  • 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