Data label in Flutter Circular Charts (SfCircularChart)

13 May 202124 minutes to read

Data label can be added to a chart series by enabling the isVisible property in the dataLabelSettings. You can use the following properties to customize the appearance.

  • color - used to change the background color of the data label shape.
  • borderWidth - used to change the stroke width of the data label shape.
  • borderColor - used to change the stroke color of the data label shape.
  • alignment - aligns the data label text to near, center and far.
  • textStyle - used to change the data label text color, size, font family, font style, and font weight.
  • color - used to change the color of the data label.
  • fontFamily - used to change the font family for the data label.
  • fontStyle - used to change the font style for the data label.
  • fontWeight - used to change the font weight for the data label.
  • fontSize - used to change the font size for the data label.
  • margin - used to change the margin size for data labels.
  • opacity - used to control the transparency of the data label.
  • labelAlignment - used to align the Circular data label positions. The available options to customize the positions are outer, auto, top, bottom and middle.
  • borderRadius - used to add the rounded corners to the data label shape.
  • angle - used to rotate the labels.
  • offset - used to move the data label vertically or horizontally from its position.
  • showCumulativeValues - to show the cumulative values in stacked type series charts.
  • labelIntersectAction - action on data labels intersection. The intersecting data labels can be hidden.
  • dart
  • @override
        Widget build(BuildContext context) {
            return Scaffold(
                body: Center(
                    child: Container(
                        child: SfCircularChart(
                            series: <CircularSeries>[
                                PieSeries<ChartData, double>(
                                    dataSource: chartData,
                                    pointColorMapper: (ChartData data, _) => data.color,
                                    xValueMapper: (ChartData data, _) => data.x,
                                    yValueMapper: (ChartData data, _) => data.y,
                                    dataLabelSettings: DataLabelSettings(
                                        // Renders the data label
                                        isVisible: true
                                    )
                                )
                            ]
                        )
                    )
                )
            );
        }

    DataLabel

    Formatting label content

    Data label considers the format used in the Circular series by default. In the below code snippet, we have specified format for the data label in the dataLabelMapper and you can see that the same format is applied to the data label.

  • dart
  • @override
        Widget build(BuildContext context) {
            return Scaffold(
                body: Center(
                    child: Container(
                        child: SfCircularChart(
                            series: <CircularSeries>[
                                PieSeries<ChartData, double>(
                                    dataSource: [
                                        // Bind data source
                                       ChartData('Jan', 35, '35%'),
                                       ChartData('Feb', 28, '28%'),
                                       ChartData('Mar', 34, '34%'),
                                       ChartData('Apr', 32,  '32%'),
                                       ChartData('May', 40, '40%')
                                    ],
                                    color: Colors.red,
                                    xValueMapper: (ChartData data, _) => data.x,
                                    yValueMapper: (ChartData data, _) => data.y,
                                    dataLabelMapper: (ChartData data, _) => data.text,
                                    dataLabelSettings: DataLabelSettings(
                                        isVisible: true
                                    )
                                )
                            ]
                        )
                    )
                )
            );
        }

    DataLabel format

    Label position

    The labelAlignment property is used to position the Circular chart type data labels at top, bottom, auto, outer and middle position of the actual data point position. By default, labels are auto positioned. You can move the labels horizontally and vertically using OffsetX and OffsetY properties respectively.

    The labelPosition property is used to place the circular series data labels either inside or outside. By default the label of circular chart is placed inside the series.

  • dart
  • @override
        Widget build(BuildContext context) {
            return Scaffold(
                body: Center(
                    child: Container(
                        child: SfCircularChart(
                            series: <CircularSeries>[
                                PieSeries<ChartData, double>(
                                    dataSource: chartData,
                                    xValueMapper: (ChartData data, _) => data.x,
                                    yValueMapper: (ChartData data, _) => data.y,
                                    dataLabelSettings: DataLabelSettings(
                                        isVisible: true,
                                        // Positioning the data label
                                        labelPosition: ChartDataLabelPosition.outside
                                    )
                                )
                            ]
                        )
                    )
                )
            );
        }

    Data label position

    NOTE

    The labelAlignment property is used to position the Cartesian chart labels whereas labelPosition property is used to position the circular chart labels.

    Smart labels

    This feature is used to arrange the data labels smartly and avoid the intersection when there is overlapping of labels. The property enableSmartLabels in CircularSeries is used to arrange the data labels smartly. By default, this property is true.

  • dart
  • @override
        Widget build(BuildContext context) {
            return Scaffold(
                body: Center(
                    child: Container(
                        child:SfCircularChart(
                            series: <CircularSeries>[
                                PieSeries<ChartData, double>(
                                    // Avoid labels intersection
                                    enableSmartLabels: true,
                                    dataSource: chartData,
                                    xValueMapper: (ChartData data, _) => data.x,
                                    yValueMapper: (ChartData data, _) =>  data.y,
                                    dataLabelMapper: (ChartData data, _) => data.x,
                                    dataLabelSettings: DataLabelSettings(
                                        isVisible: true,
                                        labelPosition: ChartDataLabelPosition.inside
                                    )   
                                )
                            ]   
                        )
                    )
                )
            );
        }

    Smart labels

    Apply series color

    The useSeriesColor property is used to apply the series color to background color of the data labels. The default value of this property is false.

  • dart
  • @override
        Widget build(BuildContext context) {
            return Scaffold(
                body: Center(
                    child: Container(
                        child:SfCircularChart(
                            series: <CircularSeries>[
                                PieSeries<ChartData, double>(
                                    dataSource: chartData,
                                    xValueMapper: (ChartData data, _) => data.x,
                                    yValueMapper: (ChartData data, _) => data.y,
                                    dataLabelMapper: (ChartData data, _) => data.x,
                                    dataLabelSettings: DataLabelSettings(
                                        isVisible: true, 
                                        labelPosition: ChartDataLabelPosition.outside,
                                        // Renders background rectangle and fills it with series color
                                        useSeriesColor: true
                                    )
                                )
                            ]
                        )
                    )
                )
            );
        }

    Series color

    Connector line

    This feature is used to connect label and data point using a line. It is applicable only for Pie and Doughnut chart types. The connectorLineSettings property can be used to customize the connector line.

    • color - used to change the color of the line
    • width - used to change the stroke thickness of the line
    • length - specifies the length of the connector line.
    • type - specifies the shape of connector line either curve or line.
  • dart
  • @override
        Widget build(BuildContext context) {
            return Scaffold(
                body: Center(
                    child: Container(
                        child: SfCircularChart(
                            series: <CircularSeries>[
                                PieSeries<ChartData, double>(
                                    enableSmartLabels: true,
                                    dataSource: chartData,
                                    xValueMapper: (ChartData data, _) => data.x,
                                    yValueMapper: (ChartData data, _) => data.y,
                                    dataLabelSettings: DataLabelSettings(
                                        isVisible: true,
                                        labelPosition: ChartDataLabelPosition.outside,
                                        connectorLineSettings: ConnectorLineSettings(
                                            // Type of the connector line
                                            type: ConnectorType.curve
                                        )
                                    )
                                )
                            ]
                        )
                    )
                )
            );
        }

    Connector line

    Point text mapping

    The dataLabelMapper property is used to map the text from data source.

  • dart
  • @override
        Widget build(BuildContext context) {
            final List<ChartData> chartData = [
                ChartData('USA', 17, '17%'),
                ChartData('China', 34, '34%'),
                ChartData('Japan', 24, '24%'),
                ChartData('Africa', 30, '30%'),
                ChartData('UK', 10, '10%')
            ];
    
            return Scaffold(
                body: Center(
                    child: Container(
                        child:SfCircularChart(
                            series: <CircularSeries>[
                                PieSeries<ChartData, String>(
                                    dataSource: chartData,
                                    xValueMapper: (ChartData data, _) => data.x,
                                    yValueMapper: (ChartData data, _) => data.y,
                                    // Map the data label text for each point from the data source
                                    dataLabelMapper: (ChartData data, _) => data.text,
                                    dataLabelSettings: DataLabelSettings(
                                        isVisible: true
                                    )
                                )
                            ]
                        )
                    )
                )
            );
        }
    
        class ChartData {
            ChartData(this.x, this.y, this.text);
            final String x;
            final double y;
            final String text;
        }

    Data label mapper

    Label template

    You can customize the appearance of the data label with your own template using the builder property of dataLabelSettings.

  • dart
  • @override
        Widget build(BuildContext context) {
            return Scaffold(
                body: Center(
                    child: Container(
                        child:SfCircularChart(
                            series: <CircularSeries>[
                                PieSeries<ChartData, String>(
                                    dataSource: chartData,
                                    xValueMapper: (ChartData data, _) => data.x,
                                    yValueMapper: (ChartData data, _) => data.y,
                                    dataLabelMapper: (ChartData data, _) => data.text,
                                    dataLabelSettings: DataLabelSettings(
                                        isVisible: true,
                                        // Templating the data label
                                        builder: (dynamic data, dynamic point, dynamic series, int pointIndex, int seriesIndex) {
                                            return Container(
                                            height: 30,
                                            width: 30,
                                            child: Image.asset('images/livechart.png')
                                            );
                                        }
                                    )
                                )
                            ]
                        )
                    )
                )
            );
        }

    Label template

    Hide data label for 0 value

    Data label and its connector line in the Circular charts for the point value 0 can be hidden using the showZeroValue property. This defaults to true.

  • dart
  • final List<SalesData> chartData = <SalesData>[
            SalesData('Jan', 35),
            SalesData('Feb', 28),
            SalesData('March', 0),
            SalesData('April', 32),
            SalesData('May', 40)
        ];
        
        @override
        Widget build(BuildContext context) {
            return Scaffold(
                body: Center(
                    child: Container(
                        child:SfCircularChart(
                            series: <CircularSeries<SalesData, String>>[
                                PieSeries<SalesData, String>(
                                    dataSource: chartData,
                                    xValueMapper: (SalesData sales, _) => sales.xValue,
                                    yValueMapper: (SalesData sales, _) => sales.yValue,
                                    dataLabelSettings: DataLabelSettings(
                                        showZeroValue : false, 
                                        isVisible: true
                                    )
                                )
                            ],
                        )
                    )
                )
            );
        }

    datalabel0value

    Data label saturation color

    If the user didn’t provide text color to the data label, then by default, the saturation color is applied to the data label text. i.e., if the data points background color intensity is dark, then the data label will render in white color (#FFFFFF) and if the data points background color intensity is light, data label will render in black color (#000000).

    label_saturation