検索
[Flutter/dart] 棒グラフを作成する
- M.R

- 2021年2月25日
- 読了時間: 2分
概要
アプリ内でユーザのデータを棒グラフで表示したい場合がありますよね。今回はflutterで棒グラフを作成する方法をご紹介します。
方法
charts_flutterというライブラリを使用します。(公式)
インストール
pubsec.yamlに以下を追加してください。
charts_flutter: ^0.9.0dartファイルの先頭に以下を追加してください。
import 'package:charts_flutter/flutter.dart' as charts;charts_flutter内のColorというグラフの色を規定するクラス名が既存のColorと被るので、名前付きでimportすることをお勧めします。
グラフ用データの作成
以下のサンプルクラスをグラフ化します。
class SampleData{
String name;
int value;
SampleData({this.name, this.value});
}SampleDataのリストをグラフ用のデータに変換します。
Widget makeChart(List<SampleData> datas){
List<charts.Color> _colors=
[charts.ColorUtil.fromDartColor(Colors.red),
charts.Color.fromHex(code: "#1976D2"),
charts.MaterialPalette.green.shadeDefault,
charts.Color.black];
List<charts.Series<SampleData, String>> _series=[
charts.Series<SampleData, String>(
id: "sample",
data: datas,
domainFn: (_sample, _)=> _sample.name,
measureFn: (_sample, _)=> _sample.value,
colorFn: (_sample, i)
=> i<_colors.length? _colors[i] : _colors[_colors.length-1]
)
];
domainFnはx軸、measureFnはy軸の値を決めるメソッドです。1つ目の引数はSampleData、2つ目の引数はデータのインデックスです。
colorFnはグラフの色を決めるメソッドです。色の指定の仕方はColorクラスから変換、コードで指定、標準の色から選択、ができます。
chartの作成
//続き
return Container(
height: 400,
child: charts.BarChart(
_series,
domainAxis: new charts.OrdinalAxisSpec(
renderSpec: new charts.SmallTickRendererSpec(
labelRotation: 45, //1 ラベルを回転
labelStyle: new charts.TextStyleSpec( //2 ラベルのスタイル
fontSize: 16
),
)
),
),
);
}上で作成した_seriesをcharts.BarChartの第1引数に渡します。
それ以降は軸ラベルの設定をしています。
1の部分ではx軸のラベル同士が重ならないように45°回転しています。
(おそらくバグだと思いますが、回転角を90°にすると高さが固定になってしまいます)
2の部分ではx軸ラベルの書式を設定しています。
他にも色々設定できるので公式を調べてみてください。
使用例
class MyHomePageState extends State<MyHomePage> {
List<SampleData> datas;
@override
void initState() {
datas=[
SampleData(name: "Alice", value: 90),
SampleData(name: "Bob", value: 85),
SampleData(name: "Charlie", value: 50),
SampleData(name: "Daniel", value: 100)
];
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('demo'),
),
body: Container(
padding: const EdgeInsets.all(16),
child: makeChart(datas),
)
);
}
Widget makeChart(List<SampleData> datas){
//略
}
}以下のようなグラフができます!







コメント