mpandroidchart 对比直方图(柱状图)小例子

ink_s 2016-05-27 12:13:30
最近做了个软件,要画出数据统计图表,网上搜了下,MpAndroidChart很强大,什么曲线的,直方图,饼状图,雷达图都有,但是找了几个例子都是一条曲线的,自己研究了下,做了个可以对比的直方图。
package com.example.textchart;

import android.R.color;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Color;

import java.util.ArrayList;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.LimitLine;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.components.XAxis.XAxisPosition;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.utils.ColorTemplate;

import com.example.textchart.R;
import android.os.Bundle;



public class MainActivity extends Activity {

public BarChart barChart;
public ArrayList<BarEntry> entries = new ArrayList<BarEntry>(); //(x,y1)
public ArrayList<BarEntry> entries2 = new ArrayList<BarEntry>();//(x,y2)
public ArrayList<BarEntry> entries3= new ArrayList<BarEntry>();//(x,y3)
public BarDataSet dataset ,dataset2,dataset3;

private XAxis xAxis; //X坐标轴
private YAxis yAxis; //Y
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

barChart = (BarChart) findViewById(R.id.spread_line_chart);
xAxis = barChart.getXAxis();
xAxis.setPosition(XAxisPosition.BOTTOM);//X轴在下边
yAxis = barChart.getAxisLeft();
xAxis.setDrawGridLines(false);//不要竖线网格
yAxis.setStartAtZero(false);//不一定从0坐标开始
barChart.getAxisRight().setEnabled(false); // 隐藏右边 的坐标轴
xAxis.setAvoidFirstLastClipping(false);



/*
* barChart.zoom(1.0f,1.0f,0f,0f); 开始时放大倍数(x轴,y轴,起点(x,y)),
(1.0f,1.0f,0f,0f)(0,0)点开始,放大1倍(原始大小),如果数据太多,不放大会很密集,
可以根据数据多少动态计算放大倍数,如下(最多显示5条,可滑动或缩放查看全部)
int n = (int) Math.ceil(MainActivity.measurements.size()/5.0);
if(n==0){
barChart.zoom(1.0f,1.0f,0f,0f);
}else{
barChart.zoom((float)n,1.0f,0f,0f);
}

*
*/
barChart.zoom(3.0f,1.0f,0f,0f);


initEntriesData(); //添加Y轴数据

show();

}
public void initEntriesData() {
entries.add(new BarEntry(4f, 0));
entries.add(new BarEntry(8f, 1));
entries.add(new BarEntry(6f, 2));
entries.add(new BarEntry(12f, 3));
entries.add(new BarEntry(18f, 4));
entries.add(new BarEntry(9f, 5));
entries.add(new BarEntry(4f, 6));
entries.add(new BarEntry(8f, 7));
entries.add(new BarEntry(6f, 8));
entries.add(new BarEntry(12f, 9));
entries.add(new BarEntry(18f, 10));
entries.add(new BarEntry(9f, 11));

entries2.add(new BarEntry(5f, 0));
entries2.add(new BarEntry(6f, 1));
entries2.add(new BarEntry(7f, 2));
entries2.add(new BarEntry(5f, 3));
entries2.add(new BarEntry(13f, 4));
entries2.add(new BarEntry(12f, 5));
entries2.add(new BarEntry(5f, 6));
entries2.add(new BarEntry(6f, 7));
entries2.add(new BarEntry(7f, 8));
entries2.add(new BarEntry(5f, 9));
entries2.add(new BarEntry(13f, 10));
entries2.add(new BarEntry(12f, 11));

entries3.add(new BarEntry(8f, 0));
entries3.add(new BarEntry(4f, 1));
entries3.add(new BarEntry(15f, 2));
entries3.add(new BarEntry(12f, 3));
entries3.add(new BarEntry(12f, 4));
entries3.add(new BarEntry(1f, 5));
entries3.add(new BarEntry(8f, 6));
entries3.add(new BarEntry(4f, 7));
entries3.add(new BarEntry(15f, 8));
entries3.add(new BarEntry(12f, 9));
entries3.add(new BarEntry(12f, 10));
entries3.add(new BarEntry(1f, 11));
}


public void show() {
dataset = new BarDataSet(entries, "甲");
dataset.setColor(Color.rgb(255, 48, 48));
dataset2 = new BarDataSet(entries2, "乙");
dataset2.setColor(Color.rgb(0, 191, 255));
dataset3 = new BarDataSet(entries3, "丙");
dataset3.setColor(Color.rgb(255, 215, 0));

ArrayList<BarDataSet> dataSets = new ArrayList<BarDataSet>(); //坐标线的集合。
dataSets.add(dataset);
dataSets.add(dataset2);
dataSets.add(dataset3);

ArrayList<String> xVals = new ArrayList<String>(); //x轴坐标
for(int i = 1;i<13;i++){
xVals.add("第"+i+"次");
}


BarData data3 = new BarData(xVals, dataSets);
barChart.setData(data3);
barChart.animateY(2000);//动画效果 y轴方向,2秒



// chart.animateXY(5000,5000); //动画效果 xy轴方向,5秒

barChart.setDescription("某某某数据直方图");
}

}
...全文
490 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
cchvsgame 2016-05-28
  • 打赏
  • 举报
回复
还好啊 还好啊

80,359

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧