LineChart、BarChart的纵坐标设置

最近弄曲线图和柱状图,纵坐标的坐标轴的值有小数点,柱状图的数字也有小数点,如图

一、曲线图

曲线图,纵坐标的坐标轴小数点处理,我这边处理是纵坐标固定5等分,然后去最大值去处理,动态改动纵坐标的值。

比如数据最大是4,那么纵坐标的坐标轴最大是5,如果数据的最大值是8,那么纵坐标的坐标轴最大是10

public void showLineChart(List<Float> xAxisValues, List<Integer> yAxisValues, String label, int color,int maxValue) {
    try {
        cleandata();//先清除已有的视图

        if (yAxisValues == null || yAxisValues.size() == 0) {//当集合为空时,自动补0
            yAxisValues = new ArrayList<>();
            for (int i = 0; i < xAxisValues.size(); i++) {
                yAxisValues.add(0);
            }
        }

        ArrayList<Entry> entries = new ArrayList<>();
        for (int i = 1; i < xAxisValues.size(); i++) {//从1开始画,就设置i = 1,从0开始画就设置i=0
            entries.add(new Entry(xAxisValues.get(i), yAxisValues.get(i)));
        }
        // 每一个LineDataSet代表一条线
        LineDataSet lineDataSet = new LineDataSet(entries, label);
        //线模式为圆滑曲线(默认折线)
        lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
        //设置圆心半径
        lineDataSet.setCircleRadius(10f);
        //设置曲线值的圆点是实心还是空心
        lineDataSet.setDrawCircleHole(false);
        initLineDataSet(lineDataSet, color, false);
        lineDataSet.setValueFormatter(new MyValueFormatter());

        ArrayList<ILineDataSet> dataSets = new ArrayList<>();
        dataSets.add(lineDataSet);
        LineData data = new LineData(dataSets);
        //设置X轴的刻度数
        xAxis.setLabelCount(xAxisValues.size());

        //设置Y轴坐标
        leftAxis.setLabelCount(5, false);//设置纵坐标的个数
        leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
        // Y轴值设置5的倍数,防止小数点
        if(maxValue >=5){
            int chushu = maxValue / 5;
            leftAxis.setAxisMaximum((chushu + 1) * 5);
        }else {
            leftAxis.setAxisMaximum(5);
        }

        mlineChart.setData(data);
        initdata();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

改后效果如下图:

 

二、柱状图

1、纵坐标数据为整数

2、柱状图上面显示数据

3、柱状图上面显示数据为整数

public void showBarChart(List<String> xValues, List<List<Integer>> yValuesList, List<String> labels,int maxValue){
    try {
        cleandata();
        if (yValuesList == null || yValuesList.size() == 0) {//当集合为空时,自动补0
            for (int i = 0; i < 2; i++) {
                List<Integer> yValue = new ArrayList<>();
                for (int j = 0; j < xValues.size(); j++) {
                    yValue.add(0);
                }
                yValuesList.add(yValue);
            }
        } else {
            for (int j = 0; j < yValuesList.size(); j++) {
                if (yValuesList.get(j) == null || yValuesList.get(j).size() == 0) {//当集合为空时,自动补0
                    List<Integer> yValue = new ArrayList<>();
                    for (int k = 0; k < xValues.size(); k++) {
                        yValue.add(0);
                    }
                    yValuesList.remove(j);
                    yValuesList.add(j, yValue);
                }
            }
        }

        mBarChart.getXAxis().setValueFormatter(new StringAxisValueFormatter(xValues));
        BarData data = new BarData();
        for (int i = 0; i < yValuesList.size(); i++) {
            ArrayList<BarEntry> entries = new ArrayList<>();
            for (int j = 0; j < yValuesList.get(i).size(); j++) {
                entries.add(new BarEntry(i, yValuesList.get(i).get(j)));
            }
            // y轴的数据集合
            BarDataSet barDataSet = new BarDataSet(entries, labels.get(i));
            barDataSet.setColor(colors.get(i));
            barDataSet.setValueTextColor(colors.get(i));
            barDataSet.setValueTextSize(10f);
            data.addDataSet(barDataSet);

        }
        // 3、柱状图上面数据为整数
        data.setValueFormatter(new IValueFormatter() {
            @Override
            public String getFormattedValue(float value, Entry entry, int i, ViewPortHandler viewPortHandler) {
                String str = value + "";
                if (str.length()==0) {
                    return str;
                }
                return str.substring(0, str.indexOf("."));//设置自己的返回位数
            }
        });

        int amount = yValuesList.size();

        data.setDrawValues(true);//是否显示数值在柱顶部(2、柱状图上面显示数据)

        float groupSpace = 0.4f; //柱状图组之间的间距
        float barSpace = (float) ((1 - 0.4) / amount / 10); // x4 DataSet
        float barWidth = (float) ((1 - 0.4) / amount / 10 * 9); // x4 DataSet

        // (0.2 + 0.02) * 4 + 0.12 = 1.00 -> interval per "group"
        mBarChart.getXAxis().setLabelCount(xValues.size(), false);
        data.setBarWidth(barWidth);
        xAxis.setAxisMaximum(xValues.size());
        xAxis.setAxisMinimum(0);

        //设置Y轴坐标(1、纵坐标数据为整数)
        leftAxis.setLabelCount(5, false);//设置纵坐标的个数
        leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
        // Y轴值设置5的倍数,防止小数点
        if(maxValue >=5){
            int chushu = maxValue / 5;
            leftAxis.setAxisMaximum((chushu + 1) * 5);
        }else {
            leftAxis.setAxisMaximum(5);
        }

        data.groupBars(0, groupSpace, barSpace);
        mBarChart.setData(data);
        initdata();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

改后效果图:

 

也是参考别人整理的,有问题欢迎指出,自己做个备份用的,省得以后一直找

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值