设置数据

如果你想增加值(数据)到图表中,它必须用下面这个方法。

  1. public void setData(ChartData data) { ... }

基类ChartData类封装了所有的数据和信息那是在图表绘制期间需要的。对于每种类型的图表,ChartData的不同的子类(例如LineData)存在应该被用来为图表设置数据。在构造函数中,你能移交数据到ArrayList模板,并且作为值来显示,另外字符串的ArrayList将描述在x轴的标签。例如类LineData(继承自ChartData),用来增加数据到LineChart:

  1. // this is just one of many constructors
  2. public LineData(ArrayList<String> xVals, ArrayList<LineDataSet> sets) { ... }

因此,什么是DataSet为什么需要它?那实际上相当简单。在图表内互相在一起的数据集对象表示一组条目(数据条目类型)。它被设计用来区分在图表中逻辑上不同组的值。对于每种类型的图表,扩展数据集 (例如 LineDataSet) 的不同对象存在允许特定的样式。
作为一个例子,你可能想用LineChart展示两个不同公司的季度收入在一年中的。在这种情况下,建议你创建两个不同的LineDataSet对象,每个包含四个值(每个代表一个季度)。用ArrayList来描述x轴上的标签,你可以简单的提供四个字符串“1.Q”,“2.Q”,“3.Q”,“4.Q”
当然,你只提供一个包含两个公司8个值的LineDataSet对象也是可以的。

那么怎么设置一个LinDataSet对象呢?

  1. public LineDataSet(ArrayList<Entry> yVals, String label) { ... }

在查找构造函数时(不同的构造函数可用),它是可见的,LinedataSet需要一个ArrayList条目类型和一个字符串用来描述LineDataSet以及用于图表标签。更进一步这个标签能被用来寻找在LineData对象中除LineDataSet对象外的其他LineDataSet。
ArrayList条目类型封装了图表的所有值。一个Entry对象除了封装它周围的值还保存了它自己的值,它的位置在x轴(在LineData对象的字符串类型的ArrayList里面值的索引被映射):

  1. public Entry(float val, int xIndex) { ... }

把它们放在一起(例如两个公司 一年里的季度收入):
首先,创建Entry的类型的列表保存你的值:

  1. ArrayList<Entry> valsComp1 = new ArrayList<Entry>();
  2. ArrayList<Entry> valsComp2 = new ArrayList<Entry>();

然后,填充列表用Entry对象。确保entry对象包含正确的x轴的索引(当然,一个循环能在这儿被使用,在这种情况下,循环计数器可以为x轴的索引)。

  1. Entry c1e1 = new Entry(100.000f, 0); // 0 == quarter 1
  2. valsComp1.add(c1e1);
  3. Entry c1e2 = new Entry(50.000f, 1); // 1 == quarter 2 ...
  4. valsComp1.add(c1e2);
  5. // and so on ...
  6. Entry c2e1 = new Entry(120.000f, 0); // 0 == quarter 1
  7. valsComp2.add(c2e1);
  8. Entry c2e2 = new Entry(110.000f, 1); // 1 == quarter 2 ...
  9. valsComp2.add(c2e2);
  10. //...

现在我们有了Entry对象的列表,LineDataSet对象可以被创建:

  1. LineDataSet setComp1 = new LineDataSet(valsComp1, "Company 1");
  2. LineDataSet setComp2 = new LineDataSet(valsComp2, "Company 2");

但是还没完,我们创建一个DataSets的列表和一个x轴条目的列表并且构建我们的ChartData对象:

  1. ArrayList<LineDataSet> dataSets = new ArrayList<LineDataSet>();
  2. dataSets.add(setComp1);
  3. dataSets.add(setComp2);
  4. ArrayList<String> xVals = new ArrayList<String>();
  5. xVals.add("1.Q"); xVals.add("2.Q"); xVals.add("3.Q"); xVals.add("4.Q");
  6. LineData data = new LineData(xVals, dataSets);
  7. mLineChart.setData(data);
  8. mLineChart.invalidate(); // refresh

在调用了invalidate()之后图表被刷新并且提供的数据被绘制。