ライブラリ「MPAndroidChart」を利用して、各種グラフを実装する方法を説明しています。
本記事では、 ライブラリ「MPAndroidChart」 を使用して表示できるグラフのうち、以下のグラフについて実装例を示していきます。
- LineChart(線グラフ)
- BarChart(棒グラフ)
- BubbleChart(バブルチャート)
- PieChart(円グラフ)
- RadarChart(レーダーチャート)
- ScatterChart(散布図)
ライブラリ「MPAndroidChart」 の使用が初めての方は、先に以下の記事をご覧ください。ライブラリ導入までの手順を説明しています。
実装方法
LineChart(線グラフ)
タグ
レイアウト(xml)に以下のタグを追加します。
<com.github.mikephil.charting.charts.LineChart android:id="@+id/line_chart" android:layout_width="match_parent" android:layout_height="match_parent" />
実行結果
ソースコード
以下のような処理を追加します。
アプリ起動時に表示する場合は、onCreate内に追加します。
- Entryにデータを入れる
データごとにListで定義します。示している例では2つのデータを表示するため、value1、value2という2つのEntryを定義しています。Entryでは、x軸・y軸を指定します。 - DataSetにEntryを入れる
Entryをcahrtコンポーネントに設定するための形式に変換します。同時にデータごとに色を変えています。 - chartコンポーネントにセットする
2つのデータを表示するためListにしていますが、1つの場合はListにせずそのまま設定しても良いです。
override fun onCreate(savedInstanceState: Bundle?) { …省略 //chartのコンポーネントを取得 val chart: LineChart = findViewById(R.id.line_chart); //グラフのデータを設定 val value1: ArrayList<Entry> = ArrayList() value1.add(Entry(0F, 100F)) value1.add(Entry(1F, 150F)) value1.add(Entry(2F, 120F)) val value2: ArrayList<Entry> = ArrayList() value2.add(Entry(0F, 50F)) value2.add(Entry(1F, 300F)) value2.add(Entry(2F, 250F)) //chartに設定 val dataSet1 = LineDataSet(value1, "sample1") dataSet1.color = Color.RED val dataSet2 = LineDataSet(value2, "sample2") dataSet2.color = Color.BLUE val dataSets: MutableList<ILineDataSet> = ArrayList() dataSets.add(dataSet1) dataSets.add(dataSet2) chart.data = LineData(dataSets) chart.invalidate() // refresh }
BarChart(棒グラフ)
タグ
レイアウト(xml)に以下のタグを追加します。
<com.github.mikephil.charting.charts.BarChart android:id="@+id/bar_chart" android:layout_width="match_parent" android:layout_height="match_parent" />
実行結果
ソースコード
LineChartとほとんど変わりないので、細かい説明は省きます。違いは、BarEntryやBarDataSetなどのようにBarChart(棒グラフ)用の定義に変わってるところです。
override fun onCreate(savedInstanceState: Bundle?) { …省略 //chartのコンポーネントを取得 val chart: BarChart = findViewById(R.id.bar_chart); //グラフのデータを設定 val value1: ArrayList<BarEntry> = ArrayList() value1.add(BarEntry(0F, 100F)) value1.add(BarEntry(1F, 150F)) value1.add(BarEntry(2F, 200F)) val value2: ArrayList<BarEntry> = ArrayList() value2.add(BarEntry(0F, 50F)) value2.add(BarEntry(1F, 100F)) value2.add(BarEntry(2F, 150F)) //chartに設定 val dataSet1 = BarDataSet(value1, "sample1") dataSet1.color = Color.RED val dataSet2 = BarDataSet(value2, "sample2") dataSet2.color = Color.BLUE val dataSets: MutableList<IBarDataSet> = ArrayList() dataSets.add(dataSet1) dataSets.add(dataSet2) chart.data = BarData(dataSets) chart.invalidate() // refresh }
BubbleChart(バブルチャート)
タグ
レイアウト(xml)に以下のタグを追加します。
<com.github.mikephil.charting.charts.BubbleChart android:id="@+id/bubble_chart" android:layout_width="match_parent" android:layout_height="match_parent" />
実行結果
ソースコード
これもBubbleChart(バブルチャート)用の定義に置き換わっているだけです。BubbleChartの場合は、x軸・y軸・sizeが必要なので、BubbleEntryの引数で指定しています。
override fun onCreate(savedInstanceState: Bundle?) { …省略 //chartのコンポーネントを取得 val chart: BubbleChart = findViewById(R.id.bubble_chart); //グラフのデータを設定 val value1: ArrayList<BubbleEntry> = ArrayList() value1.add(BubbleEntry(0F, 100F, 10F)) value1.add(BubbleEntry(1F, 150F, 20F)) value1.add(BubbleEntry(2F, 200F, 30F)) val value2: ArrayList<BubbleEntry> = ArrayList() value2.add(BubbleEntry(0F, 50F, 10F)) value2.add(BubbleEntry(1F, 100F, 20F)) value2.add(BubbleEntry(2F, 150F, 30F)) //chartに設定 val dataSet1 = BubbleDataSet(value1, "sample1") dataSet1.color = Color.RED val dataSet2 = BubbleDataSet(value2, "sample2") dataSet2.color = Color.BLUE val dataSets: MutableList<IBubbleDataSet> = ArrayList() dataSets.add(dataSet1) dataSets.add(dataSet2) chart.data = BubbleData(dataSets) chart.invalidate() // refresh }
PieChart(円グラフ)
タグ
レイアウト(xml)に以下のタグを追加します。
<com.github.mikephil.charting.charts.PieChart android:id="@+id/pie_chart" android:layout_width="match_parent" android:layout_height="match_parent" />
実行結果
ソースコード
PieChart(円グラフ) は1つのグラフにデータを設定していきますので、PieEntryの定義は1つだけです。同じグラフ内で色を変えないといけないので、Listで色を定義して設定しています。示している例では、RED→BLUEの順なので、項目1は赤、項目2は青で表示されます。
override fun onCreate(savedInstanceState: Bundle?) { …省略 //chartのコンポーネントを取得 val chart: PieChart = findViewById(R.id.pie_chart); //グラフのデータを設定 val value: ArrayList<PieEntry> = ArrayList() value.add(PieEntry(1F, "項目1")) value.add(PieEntry(1F, "項目2")) //表示する色を設定 val color: ArrayList<Int> = ArrayList() color.add(Color.RED) color.add(Color.BLUE) //chartに設定 val dataSet = PieDataSet(value, "sample") dataSet.colors = color chart.data = PieData(dataSet) chart.invalidate() // refresh }
RadarChart(レーダーチャート)
タグ
レイアウト(xml)に以下のタグを追加します。
<com.github.mikephil.charting.charts.RadarChart
android:id="@+id/radar_chart"
android:layout_width="match_parent"
android:layout_height="match_parent" />
実行結果
ソースコード
RadarChart(レーダーチャート) は、RadarEntryに設定したデータの数によって形が自動で変わります。示している例では、1つのデータにつき値が3つなので三角形となります。値をさらに1つ追加すると4つになりますので、四角形になります。
override fun onCreate(savedInstanceState: Bundle?) { …省略 //chartのコンポーネントを取得 val chart: RadarChart = findViewById(R.id.radar_chart); //グラフのデータを設定 val value1: ArrayList<RadarEntry> = ArrayList() value1.add(RadarEntry(0F)) value1.add(RadarEntry(1F)) value1.add(RadarEntry(2F)) val value2: ArrayList<RadarEntry> = ArrayList() value2.add(RadarEntry(3F)) value2.add(RadarEntry(5F)) value2.add(RadarEntry(6F)) //chartに設定 val dataSet1 = RadarDataSet(value1, "sample1") dataSet1.color = Color.RED val dataSet2 = RadarDataSet(value2, "sample2") dataSet2.color = Color.BLUE val dataSets: MutableList<IRadarDataSet> = ArrayList() dataSets.add(dataSet1) dataSets.add(dataSet2) chart.data = RadarData(dataSets) chart.invalidate() // refresh }
ScatterChart(散布図)
タグ
レイアウト(xml)に以下のタグを追加します。
<com.github.mikephil.charting.charts.ScatterChart android:id="@+id/scatter_chart" android:layout_width="match_parent" android:layout_height="match_parent" />
実行結果
ソースコード
ScatterChart(散布図) なので、設定した通りの座標に点が表示されます。
override fun onCreate(savedInstanceState: Bundle?) { …省略 //chartのコンポーネントを取得 val chart: ScatterChart = findViewById(R.id.scatter_chart); //グラフのデータを設定 val value1: ArrayList<Entry> = ArrayList() value1.add(Entry(0F, 100F)) value1.add(Entry(1F, 200F)) val value2: ArrayList<Entry> = ArrayList() value2.add(Entry(0F, 150F)) value2.add(Entry(1F, 250F)) //chartに設定 val dataSet1 = ScatterDataSet(value1, "sample1") dataSet1.color = Color.RED val dataSet2 = ScatterDataSet(value2, "sample2") dataSet2.color = Color.BLUE val dataSets: MutableList<IScatterDataSet> = ArrayList() dataSets.add(dataSet1) dataSets.add(dataSet2) chart.data = ScatterData(dataSets) chart.invalidate() // refresh }
横軸・縦軸の項目名を付ける
以下はx軸に項目名を付ける例です。この処理を追加します。
y軸に設定する場合は、YAxisを使用します。
// x軸の項目名を設定 val quarters = arrayOf("項目1", "項目2", "項目3") val formatter: ValueFormatter = object : ValueFormatter() { override fun getAxisLabel(value: Float, axis: AxisBase): String { return quarters[value.toInt()] } } val xAxis: XAxis = chart.xAxis xAxis.granularity = 1f xAxis.valueFormatter = formatter
まとめ
MPAndroidChartで各種グラフを表示する方法を紹介しました。
どのグラフも実装の考え方に大きな違いはありません。
- 画面に〇〇_chartを追加する
- データを定義する
- 定義したデータをchartに設定する形式に変換する
- chartにデータを設定する
もっと詳しく知りたい場合は、githubのドキュメントに書いてあります。