6. 设置数据
设置数据
如果你想增加值(数据)到图表中,它必须用下面这个方法。
public void setData(ChartData data) { ... }
基类ChartData类封装了所有的数据和信息那是在图表绘制期间需要的。对于每种类型的图表,ChartData的不同的子类(例如LineData)存在应该被用来为图表设置数据。在构造函数中,你能移交数据到ArrayList模板,并且作为值来显示,另外字符串的ArrayList将描述在x轴的标签。例如类LineData(继承自ChartData),用来增加数据到LineChart:
// this is just one of many constructors
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对象呢?
public LineDataSet(ArrayList<Entry> yVals, String label) { ... }
在查找构造函数时(不同的构造函数可用),它是可见的,LinedataSet需要一个ArrayList条目类型和一个字符串用来描述LineDataSet以及用于图表标签。更进一步这个标签能被用来寻找在LineData对象中除LineDataSet对象外的其他LineDataSet。
ArrayList条目类型封装了图表的所有值。一个Entry对象除了封装它周围的值还保存了它自己的值,它的位置在x轴(在LineData对象的字符串类型的ArrayList里面值的索引被映射):
public Entry(float val, int xIndex) { ... }
把它们放在一起(例如两个公司 一年里的季度收入):
首先,创建Entry的类型的列表保存你的值:
ArrayList<Entry> valsComp1 = new ArrayList<Entry>();
ArrayList<Entry> valsComp2 = new ArrayList<Entry>();
然后,填充列表用Entry对象。确保entry对象包含正确的x轴的索引(当然,一个循环能在这儿被使用,在这种情况下,循环计数器可以为x轴的索引)。
Entry c1e1 = new Entry(100.000f, 0); // 0 == quarter 1
valsComp1.add(c1e1);
Entry c1e2 = new Entry(50.000f, 1); // 1 == quarter 2 ...
valsComp1.add(c1e2);
// and so on ...
Entry c2e1 = new Entry(120.000f, 0); // 0 == quarter 1
valsComp2.add(c2e1);
Entry c2e2 = new Entry(110.000f, 1); // 1 == quarter 2 ...
valsComp2.add(c2e2);
//...
现在我们有了Entry对象的列表,LineDataSet对象可以被创建:
LineDataSet setComp1 = new LineDataSet(valsComp1, "Company 1");
LineDataSet setComp2 = new LineDataSet(valsComp2, "Company 2");
但是还没完,我们创建一个DataSets的列表和一个x轴条目的列表并且构建我们的ChartData对象:
ArrayList<LineDataSet> dataSets = new ArrayList<LineDataSet>();
dataSets.add(setComp1);
dataSets.add(setComp2);
ArrayList<String> xVals = new ArrayList<String>();
xVals.add("1.Q"); xVals.add("2.Q"); xVals.add("3.Q"); xVals.add("4.Q");
LineData data = new LineData(xVals, dataSets);
mLineChart.setData(data);
mLineChart.invalidate(); // refresh
在调用了invalidate()之后图表被刷新并且提供的数据被绘制。