Android:图表库(MPAndroidChart)实现多类型统计集中展示

不得不说MPAndroidChart确实是一款优秀图表库,在这之前笔者已经实现了各类统计图的效果。但就在这时,UI又扔出了混合统计的页面。顿时心里一凉,感觉完全没救了。于是再次拉出MPAndroidChart源码跑在我那卑微的测试机上。万万没想到,它竟然提供了类似的功能,顿时躁动的心慢慢恢复平静,不一会我嘴角微微上扬,这功能我能实现!

image.png

首先,我们需要知道:不同的统计图它的数据封装类是不一样的。例如:

  • LineChart:LineData 线性图
  • BarChart:BarData 柱状图
  • PieChart:PieData 饼状图
  • ScatterChart:ScatterData 散布图
  • BubbleChart:BubbleData 气泡图
  • CandleStickChart:CandleData 炒股图
  • RadarChart:RadarData 雷达图

很显然,上面统计类都是针对单一功能的统计。这里不得不提出其中一个特殊的统计类:CombinedChart。从名字就可以看出来,他是一个联合统计图表,事实确实也可将以上任意图表都汇总在CombinedChart中,那么他是通过怎样的方式设置的呢?

通过Demo得知,X、Y轴的设置和以前一样可单轴可多轴,最关键的地方在于数据设置: 我们找到了一个CombinedData类,按照上面的套路可想而知,这是数据源。点进去一看,他提供了上述各类图表的数据类,并向外提供了设置方法。相当于我们可以把CombinedData当作一个总的容器,里面包含了上面列出的各类图表数据类。咱们只需要根据需求按需添加对应的图表数据,统计图就能展示对应的类型图表。

public class CombinedData extends BarLineScatterCandleBubbleData<IBarLineScatterCandleBubbleDataSet<? extends Entry>> {
    private LineData mLineData;
    private BarData mBarData;
    private ScatterData mScatterData;
    private CandleData mCandleData;
    private BubbleData mBubbleData;
 
    public void setData(LineData data) {
        mLineData = data;
        notifyDataChanged();
    }
    public void setData(BarData data) {
        mBarData = data;
        notifyDataChanged();
    }
    public void setData(ScatterData data) {
        mScatterData = data;
        notifyDataChanged();
    }
    public void setData(CandleData data) {
        mCandleData = data;
        notifyDataChanged();
    }
    public void setData(BubbleData data) {
        mBubbleData = data;
        notifyDataChanged();
    }
    ......
}

image.png

上面需要注意的一点是柱状图的数据稍微有点意思,可以是一种颜色,也可以是多种混合叠起的样式。这里不得不说一下:因为BarData的数据源是BarDataSet,而BarDataSet的数据源BarEntry的构造方法如下:

public BarEntry(float x, float y) {//数据源可以是单个float
     super(x, y);
}
public BarEntry(float x, float[] vals) {//数据源也可以是数组
    super(x, calcSum(vals));
    ......
}

当数据源为单个值的情况下出来的效果图是一个整体的柱状;当数据源为一个数组的情况出来的效果图是多个柱状叠加起来的柱状。

柱状图还有一个重要的细节别忘了,那就是groupBars()的设置,如果设置groupSpacebarSpace,那么柱状图也会叠在一起成为一个柱状图。

以上便是实现多类图表集中展示的全部内容,希望对大家有所帮助。