最近弄曲线图和柱状图,纵坐标的坐标轴的值有小数点,柱状图的数字也有小数点,如图
一、曲线图
曲线图,纵坐标的坐标轴小数点处理,我这边处理是纵坐标固定5等分,然后去最大值去处理,动态改动纵坐标的值。
比如数据最大是4,那么纵坐标的坐标轴最大是5,如果数据的最大值是8,那么纵坐标的坐标轴最大是10
public void showLineChart(List<Float> xAxisValues, List<Integer> yAxisValues, String label, int color,int maxValue) {
try {
cleandata();//先清除已有的视图
if (yAxisValues == null || yAxisValues.size() == 0) {//当集合为空时,自动补0
yAxisValues = new ArrayList<>();
for (int i = 0; i < xAxisValues.size(); i++) {
yAxisValues.add(0);
}
}
ArrayList<Entry> entries = new ArrayList<>();
for (int i = 1; i < xAxisValues.size(); i++) {//从1开始画,就设置i = 1,从0开始画就设置i=0
entries.add(new Entry(xAxisValues.get(i), yAxisValues.get(i)));
}
// 每一个LineDataSet代表一条线
LineDataSet lineDataSet = new LineDataSet(entries, label);
//线模式为圆滑曲线(默认折线)
lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
//设置圆心半径
lineDataSet.setCircleRadius(10f);
//设置曲线值的圆点是实心还是空心
lineDataSet.setDrawCircleHole(false);
initLineDataSet(lineDataSet, color, false);
lineDataSet.setValueFormatter(new MyValueFormatter());
ArrayList<ILineDataSet> dataSets = new ArrayList<>();
dataSets.add(lineDataSet);
LineData data = new LineData(dataSets);
//设置X轴的刻度数
xAxis.setLabelCount(xAxisValues.size());
//设置Y轴坐标
leftAxis.setLabelCount(5, false);//设置纵坐标的个数
leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
// Y轴值设置5的倍数,防止小数点
if(maxValue >=5){
int chushu = maxValue / 5;
leftAxis.setAxisMaximum((chushu + 1) * 5);
}else {
leftAxis.setAxisMaximum(5);
}
mlineChart.setData(data);
initdata();
} catch (Exception e) {
e.printStackTrace();
}
}
改后效果如下图:
二、柱状图
1、纵坐标数据为整数
2、柱状图上面显示数据
3、柱状图上面显示数据为整数
public void showBarChart(List<String> xValues, List<List<Integer>> yValuesList, List<String> labels,int maxValue){ try { cleandata(); if (yValuesList == null || yValuesList.size() == 0) {//当集合为空时,自动补0 for (int i = 0; i < 2; i++) { List<Integer> yValue = new ArrayList<>(); for (int j = 0; j < xValues.size(); j++) { yValue.add(0); } yValuesList.add(yValue); } } else { for (int j = 0; j < yValuesList.size(); j++) { if (yValuesList.get(j) == null || yValuesList.get(j).size() == 0) {//当集合为空时,自动补0 List<Integer> yValue = new ArrayList<>(); for (int k = 0; k < xValues.size(); k++) { yValue.add(0); } yValuesList.remove(j); yValuesList.add(j, yValue); } } } mBarChart.getXAxis().setValueFormatter(new StringAxisValueFormatter(xValues)); BarData data = new BarData(); for (int i = 0; i < yValuesList.size(); i++) { ArrayList<BarEntry> entries = new ArrayList<>(); for (int j = 0; j < yValuesList.get(i).size(); j++) { entries.add(new BarEntry(i, yValuesList.get(i).get(j))); } // y轴的数据集合 BarDataSet barDataSet = new BarDataSet(entries, labels.get(i)); barDataSet.setColor(colors.get(i)); barDataSet.setValueTextColor(colors.get(i)); barDataSet.setValueTextSize(10f); data.addDataSet(barDataSet); } // 3、柱状图上面数据为整数 data.setValueFormatter(new IValueFormatter() { @Override public String getFormattedValue(float value, Entry entry, int i, ViewPortHandler viewPortHandler) { String str = value + ""; if (str.length()==0) { return str; } return str.substring(0, str.indexOf("."));//设置自己的返回位数 } }); int amount = yValuesList.size(); data.setDrawValues(true);//是否显示数值在柱顶部(2、柱状图上面显示数据) float groupSpace = 0.4f; //柱状图组之间的间距 float barSpace = (float) ((1 - 0.4) / amount / 10); // x4 DataSet float barWidth = (float) ((1 - 0.4) / amount / 10 * 9); // x4 DataSet // (0.2 + 0.02) * 4 + 0.12 = 1.00 -> interval per "group" mBarChart.getXAxis().setLabelCount(xValues.size(), false); data.setBarWidth(barWidth); xAxis.setAxisMaximum(xValues.size()); xAxis.setAxisMinimum(0); //设置Y轴坐标(1、纵坐标数据为整数) leftAxis.setLabelCount(5, false);//设置纵坐标的个数 leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true) // Y轴值设置5的倍数,防止小数点 if(maxValue >=5){ int chushu = maxValue / 5; leftAxis.setAxisMaximum((chushu + 1) * 5); }else { leftAxis.setAxisMaximum(5); } data.groupBars(0, groupSpace, barSpace); mBarChart.setData(data); initdata(); } catch (Exception e) { e.printStackTrace(); } }
改后效果图:
也是参考别人整理的,有问题欢迎指出,自己做个备份用的,省得以后一直找