AChartEngine(简称ACE)是Google的一个开源图表库(for Android)。它功能强大,支持散点图、折线图、饼图、气泡图、柱状图、短棒图、仪表图等多种图表。

学习了一段时间,尝试写了三种图表的创建,写满了注释

源码下载:AChartEngineExamples.zip

效果如图:
aaa1.pngaaa2.pngaaa3.png

主要代码一览:

    //创建柱状图
    private View createMultiSeriesBarChart(List<Double> dataList, List<Integer> colorList, List<String> titleList) {
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
        XYMultipleSeriesDataset dataSet = new XYMultipleSeriesDataset();

        //生成序列是获取数据中的最大最小值,用于决定y轴的起始值和结束值
        double max = 0;
        double min = 0;
        //遍历每个序列创建对应的series和renderer
        for (int i = 0; i < dataList.size(); i++) {
            int color = colorList.get(i);
            String title = titleList.get(i);

            XYSeriesRenderer r1 = new XYSeriesRenderer();
            XYSeries series = new XYSeries(title);

            //判断最大最小值
            double d = dataList.get(i);
            if (max < d)
                max = d;
            if (min > d)
                min = d;

            series.add(i, d);

            //颜色、文本大小、显示数值
            r1.setColor(color);
            r1.setChartValuesTextSize(25f);
            r1.setDisplayChartValues(true);
            //柱状图文本对齐方式
            r1.setChartValuesTextAlign(Paint.Align.CENTER);

            renderer.addSeriesRenderer(r1);
            dataSet.addSeries(series);
        }
        //设置x轴起始值和结束值,比临界值大一点可以更好的展示图表数据
        renderer.setXAxisMin(-1);
        renderer.setXAxisMax(dataList.size() + 1);

        //柱状图宽度
        renderer.setBarWidth(20f);
        //柱状图方向,横向的会导致图标拉伸
//        renderer.setOrientation(XYMultipleSeriesRenderer.Orientation.VERTICAL);
        //最大的和最小的值,比当前数值大10%…可以更好的展示图标数据
        renderer.setYAxisMax(max + max * 0.1);
        renderer.setYAxisMin(min - min * 0.1);
        //设置x,y轴的刻度数量
        renderer.setYLabels(8);
        renderer.setXLabels(dataList.size() + 3);
        //显示图例
        renderer.setShowLegend(true);
        //图例文本大小
        renderer.setLegendTextSize(25f);
        //设置不允许拖动
        renderer.setPanEnabled(false);
        //设置不允许缩放
        renderer.setZoomEnabled(false);
        //文本角度
        renderer.setXLabelsAngle(90);
        //设置背景色,两个方法必须一起调用
        renderer.setBackgroundColor(Color.WHITE);
        renderer.setApplyBackgroundColor(true);
        //边距颜色,默认是黑色
        renderer.setMarginsColor(Color.WHITE);
        //四周边距,对应上左下右,要么不填要么就填四个值
        renderer.setMargins(new int[]{50, 50, 50, 50});
        //文本大小
        renderer.setLabelsTextSize(25f);

        //BarChart.Type有两种
        //BarChart.Type.STACKED下图表上的文本对齐效果更好
        return ChartFactory.getBarChartView(this, dataSet, renderer, BarChart.Type.STACKED);
    }
    
    //创建折现图
    private View createLineChart(List<Double> dataList, int color, String seriesName) {
        //存放渲染器集合
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
        //存放数据集合,double数据
        XYMultipleSeriesDataset dataSet = new XYMultipleSeriesDataset();
        //单个渲染器
        XYSeriesRenderer r1 = new XYSeriesRenderer();
        //折现颜色(前景色)
        r1.setColor(Color.BLUE);
        //显示折现上的数值,模拟器上可能会有数值不显示
        r1.setDisplayChartValues(true);
        //数值文本大小
        r1.setChartValuesTextSize(25f);
        //线条宽度
        r1.setLineWidth(3f);
        //折线点大小
        r1.setPointStyle(PointStyle.CIRCLE);
        r1.setFillPoints(true);
        r1.setPointStrokeWidth(15f);

        //单个数据集
        XYSeries s1 = new XYSeries(seriesName);

        for (int i = 0; i < dataList.size(); i++) {
            //把数据放进数据系列对应(x, y)轴
            s1.add(i, dataList.get(i));
            //添加自定义标题,需要设hixLabels(0)
            renderer.addXTextLabel(i, "数据" + i);
        }

        //设置x轴起始值和结束值,比临界值大一点可以更好的展示图表数据
        renderer.setXAxisMin(-1);
        renderer.setXAxisMax(dataList.size() + 1);

        //获取数据中的最大最小值,用于决定y轴的起始值和结束值
        double max = Utils.maxInList(dataList);
        double min = Utils.minInList(dataList);
        //最大的和最小的值,比当前数值大10%…可以更好的展示图标数据
        renderer.setYAxisMax(max + max * 0.1);
        renderer.setYAxisMin(min - min * 0.1);
        //设置x,y轴的刻度数量
        renderer.setYLabels(8);
        renderer.setXLabels(0);

        //显示图例
        renderer.setShowLegend(true);
        //图例文本大小
        renderer.setLegendTextSize(25f);
        //设置不允许拖动
        renderer.setPanEnabled(false);
        //设置不允许缩放
        renderer.setZoomEnabled(false);
        //文本角度
        renderer.setXLabelsAngle(90);

        //设置背景色,两个方法必须一起调用
        renderer.setBackgroundColor(Color.WHITE);
        renderer.setApplyBackgroundColor(true);
        //边距颜色,默认是黑色
        renderer.setMarginsColor(Color.WHITE);
        //四周边距,对应上左下右,要么不填要么就填四个值
        renderer.setMargins(new int[]{50, 50, 50, 50});
        //文本大小
        renderer.setLabelsTextSize(25f);

        //添加渲染器和数据集到集合,两者数量必须相等
        renderer.addSeriesRenderer(r1);
        dataSet.addSeries(s1);

        return ChartFactory.getLineChartView(this, dataSet, renderer);
    }
    
    //创建饼图
    private View createMultiSeriesPieChart(List<Double> dataList, List<Integer> colorList, List<String> titleList) {
        DefaultRenderer renderer = new DefaultRenderer();
        CategorySeries categorySeries = new CategorySeries("PIE");


        //遍历每个序列创建对应的series和renderer
        for (int i = 0; i < dataList.size(); i++) {

            categorySeries.add(titleList.get(i), dataList.get(i));

            //饼图使用 SimpleSeriesRenderer
            SimpleSeriesRenderer r1 = new SimpleSeriesRenderer();
            r1.setColor(colorList.get(i));
            //设置value格式化输出为百分比,传入的值大于1会出问题
            //r1.setChartValuesFormat(NumberFormat.getPercentInstance());

            renderer.addSeriesRenderer(r1);
        }
        //显示标签
        renderer.setShowLabels(true);
        //显示数值
        renderer.setDisplayValues(true);
        //显示图例
        renderer.setShowLegend(true);
        //图例文本大小
        renderer.setLegendTextSize(25f);
        //设置不允许拖动
        renderer.setPanEnabled(false);
        //设置不允许缩放
        renderer.setZoomEnabled(false);
        //设置背景色,两个方法必须一起调用
        renderer.setBackgroundColor(Color.WHITE);
        renderer.setApplyBackgroundColor(true);
        //边距颜色,默认是黑色
        //四周边距,对应上左下右,要么不填要么就填四个值
        renderer.setMargins(new int[]{50, 50, 50, 50});
        //文本大小
        renderer.setLabelsTextSize(25f);

        return ChartFactory.getPieChartView(this, categorySeries, renderer);
    }
Last modification:March 29th, 2019 at 05:07 pm
If you think my article is useful to you, please feel free to appreciate