【Flutter】Charts_flutterの使い方:OrdinalComboBarLineChartのサンプルコードを使って解説

こんにちは!本記事では、Chartsを使って折れ線グラフや棒グラフ、もしくはそれを組み合わせたグラフを作りたいと思っている方向けに、書くべきコードの解説や実際に書いたコードをまとめています。

目次

Chartsとは?

Chartsとは、Flutterで使えるパッケージCharts_Flutterを指します。Chartsを使うと、棒グラフから折れ線グラフ、散布図、パイチャートなど、さまざまな種類のグラフを作成することができます。

下のページに飛ぶと、作成できるグラフの一覧が見れます、さらにそれぞれのグラフをクリックすることで、各グラフのサンプルコードを見ることができます。

charts

本記事ではその中でも、Combo Chartsの中にあるOriginal Bar Lineについて解説していきます。

パッケージのインポート

まず、Chartsのパッケージはインポートしておきましょう。パッケージのインポート方法については、下の記事を参考にしてください。

あわせて読みたい
【Flutter】パッケージをインストール/アンインストールする方法について~コマンドと一緒に紹介 パッケージとは、Widgetをまとめたものです。目的に沿ったパッケージを導入することで完成されたWidgetを使って簡単に開発ができるため、手間が大幅に短縮されます。 本...

パッケージをインストールしてエラーが出たら、pubspec.yamlの文字が揃っていないことが原因かもしれません。下記記事を参考にしてください。

あわせて読みたい
【Flutterエラー解決方法】…of pubspec.yaml A dependency may only have one source.sdk: flutter パッケージをインストールするために、pubspec.yamlを変更したら下記のようなエラーが出たので対処法をまとめておきます。 Running "flutter packages get" in stylerec...

このChartsパッケージがプロジェクトにインストールされていないと、次以降の記事通りにコードを書いてもエラーが出てしまいます。しっかりパッケージをインストールしてから以下の項目に進むようにしてください。

サンプルコード(googleの資料より)

下記のサンプルコード・サンプルデータをもとに、それぞれの箇所を解説していきます。

/// Example of an ordinal combo chart with two series rendered as bars, and a
/// third rendered as a line.
import 'package:flutter/material.dart';
import 'package:charts_flutter/flutter.dart' as charts;

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

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

  factory OrdinalComboBarLineChart.withSampleData() {
    return new OrdinalComboBarLineChart(
      _createSampleData(),
      // Disable animations for image tests.
      animate: false,
    );
  }


  @override
  Widget build(BuildContext context) {
    return new charts.OrdinalComboChart(seriesList,
        animate: animate,
        // Configure the default renderer as a bar renderer.
        defaultRenderer: new charts.BarRendererConfig(
            groupingType: charts.BarGroupingType.grouped),
        // Custom renderer configuration for the line series. This will be used for
        // any series that does not define a rendererIdKey.
        customSeriesRenderers: [
          new charts.LineRendererConfig(
              // ID used to link series to this renderer.
              customRendererId: 'customLine')
        ]);
  }

  /// Create series list with multiple series
  static List<charts.Series<OrdinalSales, String>> _createSampleData() {
    final desktopSalesData = [
      new OrdinalSales('2014', 5),
      new OrdinalSales('2015', 25),
      new OrdinalSales('2016', 100),
      new OrdinalSales('2017', 75),
    ];

    final tableSalesData = [
      new OrdinalSales('2014', 5),
      new OrdinalSales('2015', 25),
      new OrdinalSales('2016', 100),
      new OrdinalSales('2017', 75),
    ];

    final mobileSalesData = [
      new OrdinalSales('2014', 10),
      new OrdinalSales('2015', 50),
      new OrdinalSales('2016', 200),
      new OrdinalSales('2017', 150),
    ];

    return [
      new charts.Series<OrdinalSales, String>(
          id: 'Desktop',
          colorFn: (_, __) => charts.MaterialPalette.blue.shadeDefault,
          domainFn: (OrdinalSales sales, _) => sales.year,
          measureFn: (OrdinalSales sales, _) => sales.sales,
          data: desktopSalesData),
      new charts.Series<OrdinalSales, String>(
          id: 'Tablet',
          colorFn: (_, __) => charts.MaterialPalette.red.shadeDefault,
          domainFn: (OrdinalSales sales, _) => sales.year,
          measureFn: (OrdinalSales sales, _) => sales.sales,
          data: tableSalesData),
      new charts.Series<OrdinalSales, String>(
          id: 'Mobile ',
          colorFn: (_, __) => charts.MaterialPalette.green.shadeDefault,
          domainFn: (OrdinalSales sales, _) => sales.year,
          measureFn: (OrdinalSales sales, _) => sales.sales,
          data: mobileSalesData)
        // Configure our custom line renderer for this series.
        ..setAttribute(charts.rendererIdKey, 'customLine'),
    ];
  }
}

/// Sample ordinal data type.
class OrdinalSales {
  final String year;
  final int sales;

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

私が作成した画面で実装したコード

よかったらシェアしてね!

コメント

コメントする

CAPTCHA


目次
閉じる