[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){
//略
}
}
以下のようなグラフができます!

最新記事
すべて表示現象 アプリ内にAdmobを追加して、アプリを起動すると、下記のエラーが発生 java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider 原因 AndroidManifestの書き方が誤っていた。 <meta-data>はactivityと同じ階層にある必要が
概要 Uriを持っていて、Urlに変換したい場合の方法で少し手惑ったので共有します 方法 String url = uri.toString(); これだけです。 最後に ページを開くだけだとUriでもUrlでもいいんですが、WebViewはUrlを要求してくるんですよね。
問題 以前、日本語を含むURLを開くためには、エンコーディングしてやる必要がある、という記事を書きました。 しかし、すでにエンコーディングされているURLを再度エンコーディングしてしまうと、別のURLになってしまいます。 つまり、URLを開く処理の前に、 ・エンコーディングが必要なURLか ・すでにエンコーディングがされているか を判定しないといけないことになります。これは中々煩雑な処理です。 発