android混合统计图

标签: android 混合 统计图 | 发表时间:2014-02-12 16:40 | 作者:ZSQ_ANDROID
出处:http://www.iteye.com
AChartEngine高级应用之CombinedXYChart(组合统计图)在单个统计图上显示多样化的数据
现在是信息飞速发展时代,单个的统计图已经无法满足实际生产的要求,人们只想通过快速的观察就能知道很多信息,所以组合统计图就运用而生了,诸如,人们想了解一个地方的大致情况,首先可能要了解当地的天气情况,交通运输情况等,以下我模拟的是一个地方的天气、光照时间分布情况的统计图。这个是AChartEngine图表的高级应用。
构建CombinedXYChart图的步骤主要分为以下三步,还需要在项目中引入AChartEngine依赖jar包,在Manifest中添加:<activityandroid:name="org.achartengine.GraphicalActivity" />
1.     设置XYMultipleSeriesRenderer
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();// 设置描绘器
renderer.setAxisTitleTextSize(16);
                   renderer.setChartTitleTextSize(20);
                   renderer.setLabelsTextSize(15);
                   renderer.setLegendTextSize(15);
                   renderer.setPointSize(5f);
                   renderer.setMargins(new int[] { 20, 30, 15, 20 });// 上,左,下,右
                   int length = colors.length;
                   for (int i = 0; i < length; i++) {
                            XYSeriesRenderer r = new XYSeriesRenderer();
                            r.setColor(colors[i]);
                            r.setPointStyle(styles[i]);
                            renderer.addSeriesRenderer(r);
                   }
renderer.setXLabels(12);// X轴均分12项
                   renderer.setYLabels(10);// Y轴均分10项
                   renderer.setShowGrid(true);// 显示表格
                   renderer.setXLabelsAlign(Align.RIGHT);// 右对齐
                   renderer.setYLabelsAlign(Align.RIGHT);
                   renderer.setZoomButtonsVisible(false);// 不显示放大缩小
                   renderer.setPanEnabled(false, false);// 上下左右都不可以移动
//dataset.addSeries(0, sunSeries);
                   dataset.addSeries(0, waterSeries);
                   //renderer.addSeriesRenderer(0, lightRenderer);
                   renderer.addSeriesRenderer(0, waterRenderer);

2.     构建数据源XYMultipleSeriesDataset
// --------------------------曲线start---------------------------------------
                   String[] titles = new String[] { "最低温度", "最高温度", "平均光照时间" };// 曲线标题
                   List<double[]> x = new ArrayList<double[]>();
                   for (int i = 0; i < titles.length; i++) {
                            x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });
                   }
                   List<double[]> values = new ArrayList<double[]>();
                   values.add(new double[] { -12.3, -8, -2, 3, 16, 18, 26.4, 26.9, 18.6,
                                     12.3, -2, -10 });
                   values.add(new double[] { 9, 10, 11, 15, 19, 23, 38, 40, 37, 32, 23, 10 });

                   values.add(new double[] { 6.3, 7.5, 8.5, 9.8, 10.8, 11.3, 13.5, 14.1, 10.3, 9.5, 9.2, 8 });

                   int[] colors = new int[] { Color.GREEN, Color.RED, Color.YELLOW };// 绿色,红色
                   PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE,// 圆圈状
                                     PointStyle.DIAMOND, PointStyle.SQUARE };// 菱形状,矩形状
XYSeries waterSeries = new XYSeries("平均温度");
                   waterSeries.add(1, -3);// 添加数据
                   waterSeries.add(2, 6);
                   waterSeries.add(3, 10);
                   waterSeries.add(4, 17);
                   waterSeries.add(5, 20);
                   waterSeries.add(6, 26);
                   waterSeries.add(7, 29);
                   waterSeries.add(8, 30);
                   waterSeries.add(9, 23);
                   waterSeries.add(10, 19);
                   waterSeries.add(11, 10);
                   waterSeries.add(12, -1);
                   renderer.setBarSpacing(0.5);

                   XYSeriesRenderer waterRenderer = new XYSeriesRenderer();
                   waterRenderer.setColor(Color.CYAN);// 青色
                   waterRenderer.setDisplayChartValues(true);// 显示数值
                   waterRenderer.setChartValuesTextSize(10);// 设置数值字体

                   XYMultipleSeriesDataset dataset = buildDataset(titles, x, values);
                   //dataset.addSeries(0, sunSeries);
                   dataset.addSeries(0, waterSeries);
                   //renderer.addSeriesRenderer(0, lightRenderer);
                   renderer.addSeriesRenderer(0, waterRenderer);

3.     通过ChartFactory生成CombinedXYChartView组合统计图
mViewChart = ChartFactory.getCombinedXYChartView(
                                     getApplicationContext(), dataset, renderer, types);// 通过ChartFactory生成图表

                   mLayout.addView(mViewChart, new LayoutParams(LayoutParams.FILL_PARENT,
                                     LayoutParams.FILL_PARENT));// 将图表添加到布局中去
效果图:


Code:

[java] view plaincopy
package com.qiuzhping.achart; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import org.achartengine.ChartFactory; 
import org.achartengine.GraphicalView; 
import org.achartengine.chart.BarChart; 
import org.achartengine.chart.BubbleChart; 
import org.achartengine.chart.CubicLineChart; 
import org.achartengine.chart.LineChart; 
import org.achartengine.chart.PointStyle; 
import org.achartengine.model.XYMultipleSeriesDataset; 
import org.achartengine.model.XYSeries; 
import org.achartengine.model.XYValueSeries; 
import org.achartengine.renderer.XYMultipleSeriesRenderer; 
import org.achartengine.renderer.XYSeriesRenderer; 
 
import android.app.Activity; 
import android.graphics.Color; 
import android.graphics.Paint.Align; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.ViewGroup.LayoutParams; 
import android.view.Window; 
import android.widget.LinearLayout; 
 
public class CombinedChart extends Activity { 
    protected XYMultipleSeriesRenderer buildRenderer(int[] colors, 
            PointStyle[] styles) { 
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();// 设置两个描绘器 
        setRenderer(renderer, colors, styles); 
        return renderer; 
    } 
 
    protected void setChartSettings(XYMultipleSeriesRenderer renderer, 
            String title, String xTitle, String yTitle, double xMin, 
            double xMax, double yMin, double yMax, int axesColor, 
            int labelsColor) {// 图表样式设置 
        renderer.setChartTitle(title); 
        renderer.setXTitle(xTitle);// X轴标题 
        renderer.setYTitle(yTitle);// Y轴标题 
        renderer.setXAxisMin(xMin);// X最小值 
        renderer.setXAxisMax(xMax);// X最大值 
        renderer.setYAxisMin(yMin);// Y最小值 
        renderer.setYAxisMax(yMax);// Y最小值 
        renderer.setAxesColor(axesColor);// X轴颜色 
        renderer.setLabelsColor(labelsColor);// Y轴颜色 
    } 
 
    protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, 
            PointStyle[] styles) {// 设置描绘器属性 
        renderer.setAxisTitleTextSize(16); 
        renderer.setChartTitleTextSize(20); 
        renderer.setLabelsTextSize(15); 
        renderer.setLegendTextSize(15); 
        renderer.setPointSize(5f); 
        renderer.setMargins(new int[] { 20, 30, 15, 20 });// 上,左,下,右 
        int length = colors.length; 
        for (int i = 0; i < length; i++) { 
            XYSeriesRenderer r = new XYSeriesRenderer(); 
            r.setColor(colors[i]); 
            r.setPointStyle(styles[i]); 
            renderer.addSeriesRenderer(r); 
        } 
    } 
 
    public void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, 
            List<double[]> xValues, List<double[]> yValues, int scale) {// 设置点集 
        int length = titles.length; 
        for (int i = 0; i < length; i++) { 
            XYSeries series = new XYSeries(titles[i], scale); 
            double[] xV = xValues.get(i); 
            double[] yV = yValues.get(i); 
            int seriesLength = xV.length; 
            for (int k = 0; k < seriesLength; k++) { 
                series.add(xV[k], yV[k]); 
            } 
            dataset.addSeries(series); 
        } 
    } 
 
    protected XYMultipleSeriesDataset buildDataset(String[] titles, 
            List<double[]> xValues, List<double[]> yValues) {// 设置数据集 
        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); 
        addXYSeries(dataset, titles, xValues, yValues, 0); 
        return dataset; 
    } 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        requestWindowFeature(Window.FEATURE_NO_TITLE);// 消除标题栏 
        setContentView(R.layout.xy_chart); 
        LinearLayout mLinear = (LinearLayout) findViewById(R.id.chart);// 获取布局 
        mLinear.setBackgroundColor(Color.BLACK);// 设置背景色 
        // --------------------------曲线start--------------------------------------- 
        String[] titles = new String[] { "最低温度", "最高温度", "平均光照时间" };// 曲线标题 
        List<double[]> x = new ArrayList<double[]>(); 
        for (int i = 0; i < titles.length; i++) { 
            x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); 
        } 
        List<double[]> values = new ArrayList<double[]>(); 
        values.add(new double[] { -12.3, -8, -2, 3, 16, 18, 26.4, 26.9, 18.6, 
                12.3, -2, -10 }); 
        values.add(new double[] { 9, 10, 11, 15, 19, 23, 38, 40, 37, 32, 23, 10 }); 
 
        values.add(new double[] { 6.3, 7.5, 8.5, 9.8, 10.8, 11.3, 13.5, 14.1, 10.3, 9.5, 9.2, 8 }); 
 
        int[] colors = new int[] { Color.GREEN, Color.RED, Color.YELLOW };// 绿色,红色 
        PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE,// 圆圈状 
                PointStyle.DIAMOND, PointStyle.SQUARE };// 菱形状,矩形状 
        // 还有其他类型:X("x"), CIRCLE("circle"), TRIANGLE("triangle"), 
        // SQUARE("square"), DIAMOND("diamond"), POINT("point") 
        // ----------------------------曲线end--------------------------------- 
 
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();// 设置描绘器 
        setRenderer(renderer, colors, styles); 
        renderer.setPointSize(5.5f); 
        int length = renderer.getSeriesRendererCount(); 
        for (int i = 0; i < length; i++) { 
            XYSeriesRenderer r = (XYSeriesRenderer) renderer 
                    .getSeriesRendererAt(i); 
            Log.i("length", "length = " + length); 
            r.setLineWidth(2f);// 宽度 
            r.setFillPoints(true);// 完全填充 
        } 
        setChartSettings(renderer, "气温光照分布图", "月份", "数量(度或小时)", 0.5, 12.5, -20, 40, 
                Color.LTGRAY, Color.LTGRAY);// 设置图表的X轴,Y轴,标题 
 
        renderer.setXLabels(12);// X轴均分12项 
        renderer.setYLabels(10);// Y轴均分10项 
        renderer.setShowGrid(true);// 显示表格 
        renderer.setXLabelsAlign(Align.RIGHT);// 右对齐 
        renderer.setYLabelsAlign(Align.RIGHT); 
        renderer.setZoomButtonsVisible(false);// 不显示放大缩小 
        renderer.setPanEnabled(false, false);// 上下左右都不可以移动 
 
        /* -----------------------------光照分布图start------------------------------------
        XYValueSeries sunSeries = new XYValueSeries("光照时间");
        sunSeries.add(1f, 10, 4.3);
        sunSeries.add(2f, 10, 4.9);
        sunSeries.add(3f, 10, 5.9);
        sunSeries.add(4f, 10, 8.8);
        sunSeries.add(5f, 10, 10.8);
        sunSeries.add(6f, 10, 11.9);
        sunSeries.add(7f, 10, 13.6);
        sunSeries.add(8f, 10, 12.8);
        sunSeries.add(9f, 10, 11.4);
        sunSeries.add(10f, 10, 9.5);
        sunSeries.add(11f, 10, 7.5);
        sunSeries.add(12f, 10, 5.5);

        XYSeriesRenderer lightRenderer = new XYSeriesRenderer();
        lightRenderer.setColor(Color.YELLOW);
        -----------------------------光照分布图end------------------------------------*/  
 
        XYSeries waterSeries = new XYSeries("平均温度"); 
        waterSeries.add(1, -3);// 添加数据 
        waterSeries.add(2, 6); 
        waterSeries.add(3, 10); 
        waterSeries.add(4, 17); 
        waterSeries.add(5, 20); 
        waterSeries.add(6, 26); 
        waterSeries.add(7, 29); 
        waterSeries.add(8, 30); 
        waterSeries.add(9, 23); 
        waterSeries.add(10, 19); 
        waterSeries.add(11, 10); 
        waterSeries.add(12, -1); 
        renderer.setBarSpacing(0.5); 
 
        XYSeriesRenderer waterRenderer = new XYSeriesRenderer(); 
        waterRenderer.setColor(Color.CYAN);// 青色 
        waterRenderer.setDisplayChartValues(true);// 显示数值 
        waterRenderer.setChartValuesTextSize(10);// 设置数值字体 
 
        XYMultipleSeriesDataset dataset = buildDataset(titles, x, values); 
        //dataset.addSeries(0, sunSeries); 
        dataset.addSeries(0, waterSeries); 
        //renderer.addSeriesRenderer(0, lightRenderer); 
        renderer.addSeriesRenderer(0, waterRenderer); 
 
        String[] types = new String[] { BarChart.TYPE, LineChart.TYPE, 
                LineChart.TYPE, CubicLineChart.TYPE };// 块状,泡沫,线性、柱形类型 
        // 其他的还有RangeStackedBarChart区域图、BubbleChart泡沫状、ScatterChart 
        // 散点、TimeChart时间 
 
        GraphicalView mChartView = ChartFactory.getCombinedXYChartView( 
                getApplicationContext(), dataset, renderer, types); 
        mLinear.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT, 
                LayoutParams.FILL_PARENT)); 
    } 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [android 混合 统计图] 推荐:

android混合统计图

- - Java - 编程语言 - ITeye博客
AChartEngine高级应用之CombinedXYChart(组合统计图)在单个统计图上显示多样化的数据. 现在是信息飞速发展时代,单个的统计图已经无法满足实际生产的要求,人们只想通过快速的观察就能知道很多信息,所以组合统计图就运用而生了,诸如,人们想了解一个地方的大致情况,首先可能要了解当地的天气情况,交通运输情况等,以下我模拟的是一个地方的天气、光照时间分布情况的统计图.

Android 遥控车

- CasparZ - LinuxTOY
您确定您真的会用 Android 手机玩赛车. 16 岁的法国学生 Jonathan Rico 使用 Android 手机通过蓝牙实现了对改装玩具汽车的遥控. 操控的方式和那些标榜的智能手机游戏一样,使用重力感应,差别是这次控制的是现实世界中的遥控汽车. 收藏到 del.icio.us |.

Android免费?毛

- Ruby - FeedzShare
来自: 36氪 - FeedzShare  . 发布时间:2011年08月17日,  已有 2 人推荐. 微软CEO Steve Ballmer在预测竞争对手产品时通常口无遮拦. 比如他去年抨击Google的Android战略时,很多人都不屑一顾. 接着Android蚕食了微软的地盘,后来又开始侵犯苹果的地盘.

GetEd2k (Android应用)

- 某牢 - eMule Fans 电骡爱好者
GetEd2k是一个Android应用程序,作者是anacletus. 此应用可以帮助你把网页中的电驴(eDonkey) 链接添加到你个人电脑的电驴客户端里,不过前提是你的客户端开启了用于远程控制的Web interface(Web服务器,网页接口,Web界面),当然,eMule(电骡), MLDonkey 和 aMule 都支持该功能,所以这三种主流电驴客户端的用户都可以使用GetEd2k.

Android 4.0发布

- coofucoo - Solidot
Shawn the R0ck 写道 "2011年10月19日早上10点,谷歌与三星联手在香港发布了Android 4.0和Galaxy Nexus. " Android 4.0 的主要特性包括:更精细的UI,加强多任务和通知功能,锁屏下可打开摄像头和浏览通知,改进文本输入和拼写检查;增强视频录制和图像编辑功能,支持剪裁和旋转图片、消除红眼、添加效果等;面部识别解锁;Android Beam允许两台支持NFC的设备之间交换应用程序、联系人、音乐和视频;Wi-Fi Direct,蓝牙HDP,等等.

NoScript For Android发布

- John - Solidot
用于屏蔽脚本的浏览器流行扩展NoScript发布了Android版本. 开发者称已经在Firefox for Android测试过,此外也应该能工作在基于Maemo的设备上. 移动版NoScript可以帮助移动用户抵抗基于脚本的攻击. Android平台上的扩展功能和桌面版相似,允许用户对每个网站单独设置脚本执行许可.

Android入门:ContentProvider

- - ITeye博客
一、ContentProvider介绍. ContentProvider翻译为“内容提供者”;. 定义:指该应用包含一些方法,供外界访问,其他应用程序可以调用该方法,比如如果应用A创建了一个数据库“test.db”,默认是私有的,即其他应用程序不能对其进行操作,但是如果应用A使用了ContentProvider,则其他应用程序可以访问该数据库;.

Android Service 详解

- - CSDN博客移动开发推荐文章
一个Service也是一种应用程序组件,它运行在后台以提供某种服务,通常不具有可见的用户界面. 其它的应用程序组件可以启动一个Service,即使在用户切换到另外一个应用程序后,这个Service还是一直会在后台运行. 此外,一个应用程序也可以绑定到一个Service然后使用进程间通信(IPC)方式与Service之间发生交互.

android动画

- - CSDN博客移动开发推荐文章
一、        开发资料与实例教程. 分析android动画模块. Android 动画类的特点和区别. Android动画基础--本文转载自--springfieldx的文章,在此向他致谢. Android Animation 动画效果. Android Tween动画(一). Android Tween动画(二).