MPAndroidChart直方图、多组(可滑动、渐变可以看博主前面讲直方图的博客)

来源:互联网 发布:java通用版uc浏览下载 编辑:程序博客网 时间:2024/05/29 09:59

分组直方图

这里写图片描述


代码

private void showBarChart() {        setBarChartProperties();        setBarChartMarkView();        setXAxis();        setYAxis();        setBarChartLegend();        setBarChartData(xListValue.size(),yListValue);    }    private void setBarChartProperties() {        mBarChart.setDrawBarShadow(false);//设置阴影为false        mBarChart.setDrawValueAboveBar(false);//这里设置为true每一个直方图的值就会显示在直方图的顶部        mBarChart.getDescription().setEnabled(false);//设置描述不显示        mBarChart.setPinchZoom(false);        mBarChart.setDrawGridBackground(false);//设置不显示网格        //mbarchart.setMaxVisibleValueCount(60);        float ratio = (float) xListValue.size()/(float) 10;        mBarChart.zoom(ratio,1f,0,0);//显示的时候是按照多大的比率缩放显示  1f表示不放大缩小        //我默认手机屏幕上显示10  剩下的滑动直方图 然后显示。。假如要显示25个 那么除以10 就是放大2.5f。。同理        // 56个民族   那么放大5.6f        mBarChart.animateY(1500);//从Y轴弹出的动画时间        //mBarChart.getLegend().setEnabled(false);//设置不显示比例图        mBarChart.setScaleEnabled(false);//设置是否可以缩放        mBarChart.setTouchEnabled(true);//设置是否可以触摸        mBarChart.setDragEnabled(true);//设置是否可以拖拽    }
//定义点击直方图顶部弹出的类似popuwindow的标记private void setBarChartMarkView() {        // create a custom MarkerView (extend MarkerView) and specify the layout        // to use for it        PandectMarkerView mv = new PandectMarkerView(getActivity(), R.layout.custom_marker_view);        mv.setChartView(mBarChart); // For bounds control        mBarChart.setMarker(mv); // Set the marker to the chart    }
private void setXAxis() {        //自定义设置横坐标        IAxisValueFormatter xValueFormatter = new PandectModelFourXValueFormatter(xListValue);        //设置不显示网格线,保留水平线        XAxis xAxis = mBarChart.getXAxis();        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);        xAxis.setDrawAxisLine(true);        xAxis.setDrawGridLines(false);        xAxis.setGranularity(1f);        //xAxis.setLabelCount(xListValue.size());//设置横坐标显示多少个        xAxis.setLabelCount(10);//一个界面显示10个Lable。那么这里要设置11个        xAxis.setCenterAxisLabels(true);//字体下面的标签 显示在每个直方图的中间        xAxis.setValueFormatter(xValueFormatter);//将自定义的横坐标设置上去        xAxis.setLabelRotationAngle(-40f);    }
private void setYAxis() {        //左边Y轴        YAxis leftYAxis = mBarChart.getAxisLeft();        leftYAxis.setDrawGridLines(true);//设置从Y轴左侧发出横线        leftYAxis.setAxisMinimum(0f);        leftYAxis.setEnabled(true);//设置显示左边Y坐标        //右边Y轴        YAxis rightYAxis = mBarChart.getAxisRight();        rightYAxis.setEnabled(false);//设置隐藏右边y坐标    }
private void setBarChartLegend() {        Legend l = mBarChart.getLegend();        l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);        l.setOrientation(Legend.LegendOrientation.HORIZONTAL);        l.setDrawInside(false);        l.setYOffset(0f);        l.setXOffset(10f);        l.setFormSize(8f);        l.setXEntrySpace(4f);        l.setEnabled(true);//设置显示比例图    }
    private int[] mColors = new int[] {            Color.parseColor("#C23531"),            Color.parseColor("#2F4554")    };    private void setBarChartData(int count, ArrayList<ArrayList<Float>> yListValue) {        // 这里是通用的设置        float groupSpace = 0.12f; //柱状图组之间的间距        float barSpace = (float) ((1 - 0.12) / yListValue.size() / 10); // x4 DataSet        float barWidth = (float) ((1 - 0.12) / yListValue.size() / 10 * 9); // x4 DataSet        //满足的规则:(barWidth + barSpace)*4 + groupSpace = 1.00 -> interval per "group"        int startYear = 0;        ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();        for(int i=0;i<yListValue.size();i++){            ArrayList<BarEntry> yValues = new ArrayList<>();            for(int j=0;j<count;j++){                yValues.add(new BarEntry(j,yListValue.get(i).get(j)));            }            BarDataSet set = new BarDataSet(yValues,lableNames.get(i));            set.setDrawIcons(false);//设置直方图上面时候显示图标            set.setColor(mColors[i%mColors.length]);            dataSets.add(set);        }        BarData data = new BarData(dataSets);        data.setValueFormatter(new LargeValueFormatter());        data.setValueTextSize(10f);//设置直方图上面文字的大小        data.setBarWidth(0.9f);//设置直方图的宽度        data.setValueTextColor(Color.WHITE);        data.setDrawValues(true);//设置直方图上面的值显示        //data.setBarWidth(barWidth);//直方图的宽度        data.setDrawValues(false);//设置不显示值        mBarChart.setData(data);//设置值        mBarChart.getBarData().setBarWidth(barWidth);//设置直方图每个bar的宽度        // restrict the x-axis range        mBarChart.getXAxis().setAxisMinimum(startYear);//设置X轴的最小值从startYear开始        //要实现分组下面的代码必须实现,博主理解的不清楚,虽然简单地懂 不好意思 O(∩_∩)O        // barData.getGroupWith(...) is a helper that calculates the width each group needs based on the provided parameters        mBarChart.getXAxis().setAxisMaximum(startYear + mBarChart.getBarData().getGroupWidth(groupSpace, barSpace) * count);        //起始点、直方图组间距、直方图之间的间距        mBarChart.groupBars(startYear, groupSpace, barSpace);        mBarChart.invalidate();    }
原创粉丝点击