开发者社区> 开开心心过> 正文

Android MPAndroidChart之PieChart和数据结构以及模型【5】

简介: Android MPAndroidChart之PieChart和数据结构以及模型【5】 以MPAndroidChart的饼状图PieChart为例。
+关注继续查看
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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
React中使用Echarts实现数据可视化的小案例(基础文章)
React中使用Echarts实现数据可视化的小案例(基础文章)
149 0
【Flutter】Dart 数据类型 Map 类型 ( 创建 Map 集合 | 初始化 Map 集合 | 遍历 Map 集合 )
【Flutter】Dart 数据类型 Map 类型 ( 创建 Map 集合 | 初始化 Map 集合 | 遍历 Map 集合 )
90 0
Echarts---实现数据可视化
Echarts是一个使用JavaScript实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等)。 Echarts中提供丰富的图形模式,例如一些经常可以在项目中见到的:折线图、柱状图、饼图、还有地图等。
4447 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29172 0
ASP.NET Web开发 Echarts图表空数据优化
      1、问题提出       在Web开发中,使用Echarts百度图表控件显示折线图、饼图等时,如果从数据库取出的是空数据,默认显示的是动态气泡图,看起来很凌乱,用户体验不好,那么我...
1001 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20700 0
【Flutter】Dart 数据类型 ( dynamic 数据类型 )
【Flutter】Dart 数据类型 ( dynamic 数据类型 )
44 0
682
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载