Set minimum and maximum range of axes in charts_flutter

Viewed 1457

How can I set the range in x axis in charts_flutter? My data sample is like (5000, 5.0),(5001, 25.2),(5002, 100.5),(5003, 75.8).

My code is

/// Example of a simple line chart.
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:flutter/material.dart';

class SimpleLineChart extends StatelessWidget {
  final List<charts.Series> seriesList;
  final bool animate;

  SimpleLineChart(this.seriesList, {this.animate});

  /// Creates a [LineChart] with sample data and no transition.
  factory SimpleLineChart.withSampleData() {
    return SimpleLineChart(
      _createSampleData(),
      // Disable animations for image tests.
      animate: false,
    );
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 300,
      // decoration: const BoxDecoration(color: Color(0xff232d37)),
      width: double.infinity,
      padding:
          const EdgeInsets.only(right: 18.0, left: 12.0, top: 24, bottom: 12),
      child: charts.LineChart(seriesList, animate: animate),
    );
  }

  /// Create one series with sample hard coded data.
  static List<charts.Series<LinearSales, int>> _createSampleData() {
    final data = [
      LinearSales(5000, 5.0),
      LinearSales(5001, 25.2),
      LinearSales(5002, 100.5),
      LinearSales(5003, 75.8),
    ];

    return [
      charts.Series<LinearSales, int>(
        id: 'Sales',
        colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
        domainFn: (LinearSales sales, _) {
          return sales.year;
        },
        measureFn: (LinearSales sales, _) {
          return sales.sales;
        },
        data: data,
        domainLowerBoundFn: (s, _) => 5000,
        domainUpperBoundFn: (s, _) => 5010,
      )
    ];
  }
}

/// Sample linear data type.
class LinearSales {
  final int year;
  final double sales;

  LinearSales(this.year, this.sales);
}

The charts looks like Chart

It shows a straight line but I want x axis to start at 5000 and end on 5010. I tried setting it in

domainLowerBoundFn and domainUpperBoundFn but it still starts at 0. How do I fix it?

Ref: Charts Flutter Gallery

2 Answers

You can set domainAxis.

How about this?

child: charts.LineChart(
  seriesList,
  animate: animate,
  domainAxis: const charts.NumericAxisSpec(
    tickProviderSpec:
        charts.BasicNumericTickProviderSpec(zeroBound: false),
    viewport: charts.NumericExtents(5000.0, 5005.0),
  ),
),

viewport sample

or this?

child: charts.LineChart(
  seriesList,
  animate: animate,
  domainAxis: const charts.NumericAxisSpec(
    tickProviderSpec:
        charts.BasicNumericTickProviderSpec(zeroBound: false),
  ),
),

zeroBound: false sample

You can use the next code for Y-axis:

primaryMeasureAxis: charts.NumericAxisSpec(
          tickProviderSpec:
              charts.BasicNumericTickProviderSpec(desiredTickCount: 3)),

Full example looks like:

ScatterPlotChart(
      [seriesDistorted],
      animate: true,
      domainAxis: const NumericAxisSpec(
        tickProviderSpec: BasicNumericTickProviderSpec(
            // Vertical axis every 2 ticks from 0 to 10
            dataIsInWholeNumbers: true,
            zeroBound: false,
            desiredTickCount: 6),
      ),
      primaryMeasureAxis: const NumericAxisSpec(
          tickProviderSpec: BasicNumericTickProviderSpec(desiredTickCount: 6)),
    );
Related