[Flutter/dart] 棒グラフを作成する
概要
アプリ内でユーザのデータを棒グラフで表示したい場合がありますよね。今回はflutterで棒グラフを作成する方法をご紹介します。
方法
charts_flutterというライブラリを使用します。(公式)
インストール
pubsec.yamlに以下を追加してください。
charts_flutter: ^0.9.0
dartファイルの先頭に以下を追加してください。
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){
//略
}
}
以下のようなグラフができます!
最新記事
すべて表示やりたいこと TextFieldで入力フォームを作りたい。 例えば入力内容が金額の場合、3桁区切りで頭に¥を付けた表記にしたい。 ただしユーザにこれらを入力させるのではなく、ユーザはあくまで数字を入力するだけで、アプリ側で自動でフォーマットしたい。 方法...
現象 やってること iosシミュレータで画像をデバイスのローカルに保存 保存したパスをデータベースに保存 アプリ立ち上げ時にデータベースから画像パスを取得し、そのパスの画像を画面上に表示 起きている現象 iosシミュレータを再起動した場合、上記3で「ファイルパスが見つからな...
やりたいこと 初期値さえ決まればあとは不変な変数がある ただし、コンストラクタ起動時にはまだ決定できない このような変数について late finalで変数を定義 (何らかのタイミングで)初期化されたかどうかをチェックし、されていなければ値を入れる(チェックしないとfina...
Comments