AndroidMpAndroidChart使用流程和坑--组合图

xiaoxiao2021-02-28  58

CombinedChart 借鉴博客https://github.com/PhilJay/MPAndroidChart http://www.jianshu.com/p/587946813a78 饼状图可以详见:http://blog.csdn.net/androidwubo/article/details/72922158 柱状图可以详见:http://blog.csdn.net/androidwubo/article/details/72918612 该项目的源码:https://github.com/Orion-wubo/orion 步骤:CombinedChart 1、引用(三种方式,不一一介绍了,看github) 2、根据需求选择相应的表 折线图 LineChart 条形图 BarChart 条形折线图 Combined-Chart 圆饼图 PieChart 雷达图 ScatterChart K线图 CandleStickChart 泡泡图 BubbleChart 网状图 RadarChart 3、获取相应控件 mChart = (CombinedChart) findViewById(R.id.chart1); 注:设置屏幕横向、全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); 4、设置图标 mChart.getDescription().setEnabled(false);         mChart.setBackgroundColor(Color.WHITE);         mChart.setDrawGridBackground(false);         mChart.setDrawBarShadow(false);         mChart.setHighlightFullBarEnabled(false); //设置组合图都有那个(官方demo里面有四种,我们需求两种,就用两个,后面的在前面的渲染上面)         mChart.setDrawOrder(new CombinedChart.DrawOrder[]{                 CombinedChart.DrawOrder.BAR, CombinedChart.DrawOrder.LINE}); //设置图标说明(这个通用,比较简单,不注释了) //设置自定义mark(参考第二个博客) 5、设置x、y轴数据(这个基本上都一样) //x轴数据         XAxis xAxis = mChart.getXAxis();         xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);         xAxis.setCenterAxisLabels(true);         xAxis.setDrawGridLines(false);         xAxis.setGranularity(1f);         xAxis.setLabelCount(areaname.length,false);         xAxis.setAxisMaximum(areaname.length);         xAxis.setAxisMinimum(0f);         xAxis.setValueFormatter(new IAxisValueFormatter() {             @Override             public String getFormattedValue(float value, AxisBase axis) {                 return areaname[(int) ((value + areaname.length)%areaname.length)];             }         });         //y轴数据         IAxisValueFormatter custom = new LeftData();         YAxis leftAxis = mChart.getAxisLeft();         leftAxis.setDrawGridLines(true);         leftAxis.setLabelCount(4, false);         leftAxis.setValueFormatter(custom);         leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);         leftAxis.setSpaceTop(0f);         /**          * 如果设置了最大最小,那么不能动态计算轴的值          */         leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)         //        leftAxis.setAxisMaximum(160f);  //动态设置最大,         IAxisValueFormatter custom2 = new RightData();         YAxis rightAxis = mChart.getAxisRight();         rightAxis.setDrawGridLines(false);         rightAxis.setLabelCount(4, false);         rightAxis.setValueFormatter(custom2);         rightAxis.setSpaceTop(0f);         rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)f         //        rightAxis.setAxisMaximum(60f); 6、设置数据 (这个和之前的都有所不同) CombinedData data = new CombinedData();         data.setData(generateLineData());//设置线性         data.setData(generateBarData());//设置柱状            mChart.setData(data);         mChart.invalidate(); //线性 LineData d = new LineData(); ArrayList<Entry> entries = new ArrayList<Entry>(); for (int index = 0; index < areaname.length; index++) /** * 这个加0.5f特别重要,这样可以使第一个点从数据中间开始 * 不是从y轴开始 */ entries.add(new Entry(index + 0.5f, (float) (Math.random() * 20))); LineDataSet set = new LineDataSet(entries, "巡护面积"); set.setColor(rgb("#2d9660")); set.setLineWidth(2f); set.setCircleColor(rgb("#2d9660")); set.setCircleRadius(5f); set.setFillColor(rgb("#2d9660")); set.setMode(LineDataSet.Mode.LINEAR); set.setDrawValues(true); set.setValueTextSize(10f); set.setValueTextColor(rgb("#2d9660")); set.setAxisDependency(YAxis.AxisDependency.LEFT); d.addDataSet(set); return d; //柱状 ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>(); ArrayList<BarEntry> yVals2 = new ArrayList<BarEntry>(); /** * 给每一条设置数据 */ for (int i = 0; i < areaname.length; i++) { yVals1.add(new BarEntry(i, (float) (Math.random() * 50))); yVals2.add(new BarEntry(i, (float) (Math.random() * 50))); } BarDataSet set1, set2; set1 = new BarDataSet(yVals1, "巡护区域"); set1.setAxisDependency(YAxis.AxisDependency.LEFT); set1.setColor(rgb("##3498db")); set2 = new BarDataSet(yVals2, "护林员个数"); set2.setColor(rgb("#e74c3c")); set1.setAxisDependency(YAxis.AxisDependency.LEFT); float groupSpace = 0.32f; float barSpace = 0.04f; // x2 DataSet float barWidth = 0.3f; // x2 DataSet //这个计算公式是,(barwidh + barspace) * groupcount  + groupspace // (0.2 + 0.03) * 2 + 0.08 = 1.00 -> interval per "group" BarData data = new BarData(set1, set2); data.setBarWidth(barWidth); data.groupBars(0f, groupSpace, barSpace); return data;
转载请注明原文地址: https://www.6miu.com/read-85293.html

最新回复(0)