https://weeklycoding.com/mpandroidchart-documentation/ |
---|
这里边有官方示例,有集成的MpAndroidChart APP,也有官方的教程视频,不过好像有点少,并且全英文,画图过程中可能会出些小毛病。数据显示不全,其中有个方法chart.setExtraOffsets (left,top,right,bottom); //用于与边界有边距 |
List<Entry> lineEntryList;
LineDataSet lineDataSet;
LineData lineData;
private LineChart mChart;
private void initView() {
//初始化图表,数据绑定
mChart = (LineChart) findViewById (R.id.chart);
lineEntryList = new ArrayList<> ();
//第二个参数是那个描述,以及那个Legend ,好像都是被他默认一样了
lineDataSet = new LineDataSet (lineEntryList,"线形图");
// 添加数据
lineData = new LineData ();
lineData.addDataSet (lineDataSet);
// 把数据交给Chart控件
mChart.setData (lineData);
//记得重绘
mChart.invalidate ();
}
// 一
List<ILineDataSet> lineDataSetss =new ArrayList<> ();
lineData = new LineData (lineDataSetss);
// 二 这里可以放多个LineDataSet ,也可以只放一个
lineData = new LineData(lineDataSet,new LineDataSet (null,""));
// 三
lineData = new LineData ();
lineData.addDataSet (lineDataSet);
private void getData() {
for (int i = 0; i < 10; i++) {
//添加一个Entry 一个坐标点
lineEntryList.add (
new Entry (lineEntryList.size (),new Random ().nextInt (100))
);
}
//记得刷新,不然这憨憨他不知道是恁么个回事
lineDataSet.notifyDataSetChanged ();
lineData.notifyDataChanged ();
mChart.notifyDataSetChanged ();
//这里不必重新绘制,当然也允许你重新绘制喽
}
private void initChartStyle() {
//获得Chart 的 X,左Y,右Y 轴
XAxis xAxis = mChart.getXAxis ();
YAxis left = mChart.getAxisLeft ();
YAxis axisRight = mChart.getAxisRight ();
/**
* 以下的属性 , 因为不同的轴他们之间是有联系的,属性差不多都一致,都有,所以我就只拿X轴做示例了,
* 举一反三啊!
*/
//设置轴的间隙,另外的轴相似,基本上属性差不多值,应为他们的基类都是一家族的
xAxis.setGranularity (1f);
//设置轴的位置,默认在顶层,Top
xAxis.setPosition (XAxis.XAxisPosition.BOTTOM);
//设置轴的最小,最大值
xAxis.setAxisMinimum (0f);
xAxis.setAxisMaximum (10);
//设置轴的标签格式
xAxis.setValueFormatter (new IAxisValueFormatter () {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return value +"日";
}
});
//这个值用于设置它是否绘制,显示
xAxis.setEnabled (true);
//网格 色,以及是否绘制
xAxis.setGridColor (Color.YELLOW);
xAxis.setEnabled (true);
//设置是否绘制标签 ,标签居中吗 ? 居中就true
xAxis.setDrawLabels (true);
xAxis.setCenterAxisLabels (false);
//这里设置轴显示的标签数量,force 这个值没有详细了解,但是选true会出一点小问题,x轴的位置,可能不会对应
xAxis.setLabelCount (8,true);
//这里是一些LineDataSet 的属性
//设置它的颜色,可以是当个的颜色,也能是多个,可以 int[] list<Integer>
lineDataSet.setColors (Color.RED,Color.GRAY);
//是否绘制中心的圆洞
lineDataSet.setDrawCircleHole (false);
//是不是需要填充
lineDataSet.setDrawFilled (true);
//这里设置完它的属性啊,必须的告诉它更新了,得更新了,重绘
//mChart的一些属性
mChart.setNoDataText ("木得数据的提示");
//描述
Description description = new Description ();
description.setText ("Hello Chart");
mChart.setDescription (description);
//设置是否显示描述
mChart.getDescription ().setEnabled (true);
//legend 图表旁边的图示
Legend legend = mChart.getLegend ();
legend.setEnabled (true);
//多个图示时,可以设置它的排列方式,垂直 || 水平,一般是多条线才会用到
legend.setOrientation (Legend.LegendOrientation.VERTICAL);
//设置图示位置 设置它的位置只能垂直的,水平的分开设,
legend.setVerticalAlignment (Legend.LegendVerticalAlignment.CENTER);
legend.setHorizontalAlignment (Legend.LegendHorizontalAlignment.RIGHT);
mChart.invalidate ();
}
//初始化数据
List<BarEntry> barEntryList;
BarDataSet barDataSet;
BarData barData;
private void initView() {
mF7BarChart = view.findViewById (R.id.f7_barChart);
barEntryList = new ArrayList<> ();
//设置数据,差不多也就这里有点区别了
barDataSet = new BarDataSet (barEntryList,"");
//这里和LineChart 属性差不多
barData = new BarData (barDataSet);
mF7BarChart.setData (barData);
mF7BarChart.invalidate ();
}
堆栈的与其他的图吧,这里呢,就不详细写了
//成组图主要就是一个方法的调用 group
//官方说法: 7 * ( barSpace + barWidth ) + groupSpace = 1
//需要显示柱状图的类别 数量
int barAmount = barData.getDataSetCount ();
// 组与组之间的间隙 groupSpace
float groupSpace = 0.06f;
//这里我为了简单就分开了,组内柱之间的间隙为barSpace,柱宽为barWidth
float barSpace = ((1f- groupSpace) / barAmount )*0.01f;
float barWidth = ((1f- groupSpace) / barAmount )*0.99f;
//设置柱宽
barData.setBarWidth (barWidth);
//这个方法是必须的,不能少,少了就完了
mBarChart.groupBars (0,groupSpace,barSpace);
//设置完记得刷新,重新绘制
mBarChart.invalidate();
这是一个单独的控件,使用方法和BarChart的写法几乎一模一样,只不过X轴的位置变成了左右,左右变成了上下而已,差不多就是将BarChart 翻转了一下而已,可以理解为向右旋转了90度而已,这里就不做解释了
饼图也是常见的一种图表,它的使用方法,和前边的图示有点类似,只不过它有一些地方有点坑
我花费了大半天撸它,难受的一批呀!
//首先初始化
PieDataSet pieDataSet ;
PieData pieData;
List<PieEntry> pieEntries;
private void initView() {
pieEntries = new ArrayList<> ();
mF7PieChart = view.findViewById (R.id.f7_pieChart);
//这里我长教训了,PieChart这个图表好像需要给他数据,不然它死活不搭理你呀,getData();方法用于获取数据,
getData();
pieDataSet = new PieDataSet (pieEntries,"");
pieData = new PieData (pieDataSet);
mF7PieChart.setData (pieData);
mF7PieChart.invalidate ();
}
这里稍微写了点PieChart的属性
//设置是否绘制中间的那个洞
mF7PieChart.setDrawHoleEnabled (false);
//是否绘制值的那个标签
pieDataSet.setDrawValues (true);
//pieData特有的,就是那个值引出的线,两条
pieDataSet.setValueLinePart1Length (0.5f);
pieDataSet.setValueLinePart2Length (1.05f);
//设置这个部分之间的间隙,给点白边间隙
pieDataSet.setSliceSpace (6f);
//设置是否绘制饼图 Entry的标签
mF7PieChart.setDrawEntryLabels (false);
mF7PieChart.setDrawCenterText (false);
//这个是为了避免太靠边,导致值显示不全,这个方法
mF7PieChart.setExtraOffsets (20,50,20,10);
//设置这个部分之间的间隙,给点白边间隙
pieDataSet.setSliceSpace (6f);
//设置是否绘制饼图 Entry的标签
mF7PieChart.setDrawEntryLabels (false);
mF7PieChart.setDrawCenterText (false);
//这个是为了避免太靠边,导致值显示不全,这个方法
mF7PieChart.setExtraOffsets (20,50,20,10);
//这里记得刷新,
mF7PieChart.invalidate();