android绘制折线图的难点处理,数据的处理就简单几步-MPAndroidChart

本文详细讲解了如何使用MPAndroidChart库在Android应用中设置图表样式及数据绑定,包括图例、颜色模板、数据集创建及图表刷新等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,首先我们来看两段代码:
第一段:关于用MPAndroidChart对于图标的设置,这个设置一般都是固定的也是特别好懂,

ColorTemplate mCt;
 mCt = new ColorTemplate();
 mCt.addDataSetColors(ColorTemplate.PASTEL_COLORS, this);
 mChart = (PieChart) headView.findViewById(R.id.spread_pie_chart);
 mChart.setColorTemplate(mCt);
 mChart.setDescription("");
 mChart.setHoleRadius(30f);
 mChart.setTransparentCircleRadius(0f);
 mChart.setCenterTextSize(18f);
 mChart.setDrawXValues(true);
 mChart.setUsePercentValues(true);
 mChart.setDrawLegend(false);
 // space between slices
 mChart.setSliceSpace(1f);
 mChart.setDrawHoleEnabled(false);
 mChart.setTouchEnabled(false);

第二段,是关于数据的设置,这里设置少为复杂一点
首先我们来看代码,

ArrayList<Entry> yVals = new ArrayList<Entry>();//创建y轴的arraylist
ArrayList<String> xVals = new ArrayList<String>();//创建x轴的arraylist
for (int i = 0; i < listDatas.size(); i++) {
    yVals.add(new Entry((float)listDatas.get(i).getProvinceCount(), i));
    //添加y轴的数据,这里添加y轴的数据稍微复杂一点,其中包括,Entry和数据对应的序号。
    xVals.add(listDatas.get(i).getProvinceName());//添加y轴数据,这里添加为序号对应的名称。
}
//还没有完,下边需要设置DataSet,我理解的是DataSet是图例,就是给y轴设置一个图例,就是表示这个y轴的值表示的是什么,这里这个y轴标识的content
DataSet set1 = new DataSet(yVals, "Content");
//然后再设置一个ArrayList<DataSet>,保存设置好图例的y变量值
ArrayList<DataSet> dataSets = new ArrayList<DataSet>();
//将值添加到dataSet中
dataSets.add(set1);
//现在开始往图标里边去添加数据了,一个是x轴的值,一个是处理好的y轴的值对象。
ChartData data = new ChartData(xVals, dataSets);
mChart.setData(data);

2,如果单纯看以上的注释和代码不能够理解,或者理解不够深入,我们继续讲一个例子。加深一下理解。
因此,什么是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()之后图表被刷新并且提供的数据被绘制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鼾声鼾语

感谢您的支持鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值