饼状图
饼状图基本使用
/**
* 绘制PieChart(饼图)
*
* @param entries
*/
private void drawPieChart(ArrayList<PieEntry> entries) {
mColors.clear();
mColors.add(Color.parseColor("#67E5E5"));
mColors.add(Color.parseColor("#8BB6F6"));
mColors.add(Color.parseColor("#C29DFC"));
mColors.add(Color.parseColor("#E5E570"));
mPieChart.setUsePercentValues(true);
mPieChart.getDescription().setEnabled(false);
mPieChart.setTransparentCircleRadius(0f);
mPieChart.setRotationAngle(0);
mPieChart.setExtraOffsets(0f, 20.0f, 0f, 15.0f);
/** 触摸旋转 */
mPieChart.setRotationEnabled(false);
PieDataSet dataSet = new PieDataSet(entries, "");
dataSet.setSliceSpace(0f);
dataSet.setSelectionShift(5f);
dataSet.setColors(mColors);
mPieChart.setHoleRadius(60f);
/** y值圆圈外显示 */
dataSet.setValueLinePart1OffsetPercentage(80.f);
dataSet.setValueLinePart1Length(0.4f);
dataSet.setValueLinePart2Length(0.6f);
dataSet.setValueLineColor(Color.parseColor("#287DFD"));
dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
/** 显示百分比 */
dataSet.setDrawValues(dataSet.isDrawValuesEnabled());
PieData data = new PieData(dataSet);
data.setValueFormatter(new PercentFormatter());
data.setValueTextSize(10f);
data.setValueTextColor(Color.BLACK);
mPieChart.setData(data);
mPieChart.highlightValues(null);
/** 是否铺满 */
mPieChart.setDrawHoleEnabled(true);
/** y轴动画 */
mPieChart.animateY(1400);
mPieChart.invalidate();
mPieChart.animateY(1400, Easing.EaseInQuad);
/** 图例下部居中 */
Legend ll = mPieChart.getLegend();
ll.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
ll.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
ll.setOrientation(Legend.LegendOrientation.HORIZONTAL);
ll.setDrawInside(false);
ll.setEnabled(false);
/** 标签颜色 */
mPieChart.setEntryLabelColor(Color.BLACK);
/** 标签字体大小 */
mPieChart.setEntryLabelTextSize(10f);
}
多条折线图
多条折线图基本使用(以2条为例)
/**
* 绘制折线图
*/
private void drawLineChart(ArrayList<Entry> intValues, ArrayList<Entry> outValues) {
mStatisticsChartEmpty.setVisibility(View.GONE);
mStatisticsAgeEmptyMsg.setText(getString(R.string.common_data_null));
mStatisticsLineChart.setVisibility(View.VISIBLE);
//设置描述文本
mStatisticsLineChart.getDescription().setEnabled(false);
//设置支持触控手势
mStatisticsLineChart.setTouchEnabled(true);
mStatisticsLineChart.setDragDecelerationFrictionCoef(0.9f);
//设置缩放和拖动
mStatisticsLineChart.setDragEnabled(true);
mStatisticsLineChart.setScaleEnabled(true);
mStatisticsLineChart.setDrawGridBackground(false);
mStatisticsLineChart.setHighlightPerDragEnabled(true);
//如果禁用,扩展可以在x轴和y轴分别完成
mStatisticsLineChart.setPinchZoom(true);
setData(intValues, outValues);
mStatisticsLineChart.animateX(2000);
Legend l = mStatisticsLineChart.getLegend();
l.setForm(Legend.LegendForm.LINE);
l.setTextSize(11f);
l.setTextColor(Color.WHITE);
l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
//x轴
XAxis xAxis = mStatisticsLineChart.getXAxis();
xAxis.enableGridDashedLine(10f, 10f, 0f);
xAxis.setAxisMaximum(24f);
xAxis.setLabelCount(12);
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
if (value > 24f) {
return "";
}
return String.valueOf((int) value).concat(":00");
}
});
xAxis.setAxisMinimum(0f);
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
//避免x轴左右尽头的标注被遮挡
xAxis.setAvoidFirstLastClipping(true);
//y轴
YAxis leftAxis = mStatisticsLineChart.getAxisLeft();
leftAxis.setAxisMinimum(0f);
leftAxis.setLabelCount(6);
leftAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return String.valueOf((int) value);
}
});
leftAxis.enableGridDashedLine(10f, 10f, 0f);
leftAxis.setDrawZeroLine(true);
leftAxis.setDrawLimitLinesBehindData(true);
mStatisticsLineChart.getAxisRight().setEnabled(false);
mStatisticsLineChart.notifyDataSetChanged();
mStatisticsLineChart.getLineData().notifyDataChanged();
}
/**
* 设置折线数据集
*/
private void setData(ArrayList<Entry> inValues, ArrayList<Entry> outValues) {
LineDataSet set1, set2;
if (mStatisticsLineChart.getData() != null &&
mStatisticsLineChart.getData().getDataSetCount() > 0) {
set1 = (LineDataSet) mStatisticsLineChart.getData().getDataSetByIndex(0);
set2 = (LineDataSet) mStatisticsLineChart.getData().getDataSetByIndex(1);
set1.setValues(inValues);
set2.setValues(outValues);
mStatisticsLineChart.getData().notifyDataChanged();
mStatisticsLineChart.notifyDataSetChanged();
} else {
//in-value
set1 = new LineDataSet(inValues, "");
set1.enableDashedLine(0f, 0f, 0f);
set1.enableDashedHighlightLine(10f, 5f, 0f);
set1.setColor(Color.parseColor("#8BB6F6"));
set1.setCircleColor(Color.parseColor("#00ffffff"));
set1.setLineWidth(1f);
set1.setCircleRadius(3f);
set1.setDrawCircleHole(false);
set1.setDrawFilled(false);
set1.setMode(LineDataSet.Mode.CUBIC_BEZIER);
set1.setValueFormatter(new IValueFormatter() {
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
return String.valueOf((int) value);
}
});
set1.setFormLineWidth(0f);
set1.setFormSize(0f);
//out-value
set2 = new LineDataSet(outValues, "");
set2.enableDashedLine(0f, 0f, 0f);
set2.enableDashedHighlightLine(10f, 5f, 0f);
set2.setColor(Color.parseColor("#9AE4DD"));
set2.setCircleColor(Color.parseColor("#00ffffff"));
set2.setLineWidth(1f);
set2.setCircleRadius(3f);
set2.setDrawCircleHole(false);
set2.setDrawFilled(false);
set2.setMode(LineDataSet.Mode.CUBIC_BEZIER);
set2.setValueFormatter(new IValueFormatter() {
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
return String.valueOf((int) value);
}
});
set2.setFormLineWidth(0f);
set2.setFormSize(0f);
LineData data = new LineData(set1, set2);
data.setValueTextColor(Color.BLACK);
data.setValueTextSize(9f);
mStatisticsLineChart.setData(data);
}
}
注意事项:
1.饼状图如何设置标签线?
dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
2.折线图如何避免x轴左右尽头的坐标值被遮挡?
//避免x轴左右尽头的标注被遮挡
xAxis.setAvoidFirstLastClipping(true);
3.如何保证y轴的值为int型?
leftAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return String.valueOf((int) value);
}
});
4.如何保证折线图上的坐标点的横纵坐标值为int型?
setxxx.setValueFormatter(new IValueFormatter() {
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
return String.valueOf((int) value);
}
});