最近做了几个项目都需要用到数据的统计与分析 , 所有这几天就学习了一下MPAndroidChart , 把整理的一些知识点都分享一下, 以供大家参考.
一 . MPAndroidChart 包含哪些图表 ?
9. 多组柱状图 MutiBarChart
二 , xml的引用
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/chart1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/seekBar1" />
// 获取控件
mChart = (BarChart) findViewById(R.id.chart1);
三 , 对mChart进行设置
//对选中柱形图的值的展示
mChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
@Override
public void onValueSelected(Entry e, Highlight h) {
//选中值的展示
}
@Override
public void onNothingSelected() {
}
});
mChart.getDescription().setEnabled(false); //是否可以描述
mChart.setMaxVisibleValueCount(60); // 如果在图表中显示超过60个条目,则不会绘制任何值
mChart.setDrawBarShadow(false); // 是否展示柱形图的阴影
mChart.setDrawValueAboveBar(true);// 值是否显示在柱形图的顶部
mChart.setPinchZoom(false); //缩放现在只能在x轴和y轴分开完成
mChart.setDrawGridBackground(false); //画网格背景
// 对X轴的设置
XAxis xAxis = mChart.getXAxis();
xAxis.setTypeface(mTfLight); //设置字体
xAxis.setGranularity(1f); //间隔尺寸
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); //X轴在底部还是在顶部
xAxis.setCenterAxisLabels(true); // X轴的标签是不是居中
xAxis.setLabelRotationAngle(0f); // 标签文字旋转的角度
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return String.valueOf((int) value);
}
});
//对Y轴的设置 左边的Y轴
YAxis leftAxis = mChart.getAxisLeft();
leftAxis.setTypeface(mTfLight);
leftAxis.setLabelCount(8, false);
leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART); //
leftAxis.setSpaceTop(15f);
leftAxis.setAxisMinimum(0f); // 从0坐标开始
leftAxis.setValueFormatter(new LargeValueFormatter()); //数值的格式标准
//右边的Y轴
YAxis rightAxis = mChart.getAxisRight();rightAxis.setAxisMinimum(0f); //从0坐标开始
leftAxis.setValueFormatter(new LargeValueFormatter()); //数值的格式标准
//图例 (图标的说明)
Legend l = mChart.getLegend();
l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); //位置
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
l.setForm(LegendForm.SQUARE);
l.setFormSize(9f);
l.setTextSize(11f);
l.setXEntrySpace(4f);
//数据的设置
int count = 10,
float range = 100
private void setData(int count, float range) {
float start = 1f;
ArrayList
for (int i = (int) start; i < start + count + 1; i++) {
float mult = (range + 1);
float val = (float) (Math.random() * mult);
if (Math.random() * 100 < 25) {
yVals1.add(new BarEntry(i, val, getResources().getDrawable(R.drawable.star)));
} else {
yVals1.add(new BarEntry(i, val));
}
}
BarDataSet set1;
if (mChart.getData() != null &&
mChart.getData().getDataSetCount() > 0) {
set1 = (BarDataSet) mChart.getData().getDataSetByIndex(0);
set1.setValues(yVals1);
mChart.getData().notifyDataChanged();
mChart.notifyDataSetChanged();
} else {
set1 = new BarDataSet(yVals1, "The year 2017");
set1.setDrawIcons(false);
set1.setColors(ColorTemplate.MATERIAL_COLORS);
ArrayList
dataSets.add(set1);
BarData data = new BarData(dataSets);
data.setValueTextSize(10f);
data.setValueTypeface(mTfLight);
data.setBarWidth(0.9f);
mChart.setData(data);
}
}