Android MPAndroidChart之PieChart和数据结构以及模型【5】
以MPAndroidChart的饼状图PieChart为例。
测试的MainActivity的Java代码:
package com.example.piechart;
import java.util.ArrayList;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.formatter.PercentFormatter;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
/*
* MPAndroidChart比较复杂的部分在于绘制图表的数据源的数据结构。
* 通常,在一个二位的坐标体系内,一个任意的坐标点应包含(x,y)这样的对应数据点。
* 一般模型是在x坐标轴的x-i位置,y存在一个对应的y-i值对应,形成坐标点(i-x,i-y)
* MPAndroidChart在一定角度上将x轴的数据集处理成(i,字符标签)的简单模式,
* 但MPAndroidChart对于y轴的数据集整合成复杂的复合体。初级,y轴的Entry包含(x,y)这样的坐标点数据。
* 比如,在坐标点(xi,yi)的位置绘制数据点,那么在MPAndroidChart中,在x轴的i位置绘制字符串表示是x坐标轴的数值,然后构造y坐标轴的Entry,Entry包含(value,i)
*
* */
public class MainActivity extends Activity {
private PieChart mChart;
private String[] x = new String[] { "A类事物", "B类事物", "C类事物" };
// 凑成100 % 100
private float[] y = { 10f, 60f, 30f };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mChart = (PieChart) findViewById(R.id.chart);
// 图的描述
mChart.setDescription("by Zhang Phil @ http://blog.csdn.net/zhangphil");
// 以3个对应数据集做测试
setData(x.length);
}
private void setData(int count) {
// 准备x"轴"数据:在i的位置,显示x[i]字符串
ArrayList<String> xVals = new ArrayList<String>();
// 真实的饼状图百分比分区。
// Entry包含两个重要数据内容:position和该position的数值。
ArrayList<Entry> yVals = new ArrayList<Entry>();
for (int xi = 0; xi < count; xi++) {
xVals.add(xi, x[xi]);
// y[i]代表在x轴的i位置真实的百分比占
yVals.add(new Entry(y[xi], xi));
}
PieDataSet yDataSet = new PieDataSet(yVals, "百分比占");
// 每个百分比占区块绘制的不同颜色
ArrayList<Integer> colors = new ArrayList<Integer>();
colors.add(Color.RED);
colors.add(Color.GREEN);
colors.add(Color.BLUE);
yDataSet.setColors(colors);
// 将x轴和y轴设置给PieData作为数据源
PieData data = new PieData(xVals, yDataSet);
// 设置成PercentFormatter将追加%号
data.setValueFormatter(new PercentFormatter());
// 文字的颜色
data.setValueTextColor(Color.BLACK);
// 最终将全部完整的数据喂给PieChart
mChart.setData(data);
mChart.invalidate();
}
}
需要的布局文件,其实就一个PieChart元素:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.piechart.MainActivity" >
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
代码运行结果:
相关文章:
【1】《Android统计图表MPAndroidChart》链接地址:http://blog.csdn.net/zhangphil/article/details/47656521
【2】《基于Android MPAndroidChart实现腾讯QQ群数据统计报表核心功能》链接地址:http://blog.csdn.net/zhangphil/article/details/47685515
【3】《Android实现天气预报温度/气温折线趋势图》链接地址:http://blog.csdn.net/zhangphil/article/details/47702245
【4】《Android统计图表之柱状图(条形图)》链接地址:http://blog.csdn.net/zhangphil/article/details/47727913
【5】MPAndroidChart在github上的项目主页:https://github.com/PhilJay/MPAndroidChart