记录一下BarChart(条形图)的叠状图的使用!
注:本人使用的版本是MPAndroidChart-v3.0.3(如若版本不同有某些方法更新,可在评论区留言,尽我所能帮你解决!)
MPAndroidChart的详细使用——LineChart折线图(一)(简单使用)
MPAndroidChart的详细使用——LineChart折线图(二)(详细美化)
MPAndroidChart的详细使用——BarChart条形图(一)(简单使用)
MPAndroidChart的详细使用——BarChart条形图(二)(详细美化)
MPAndroidChart的详细使用——BarChart条形图组(三)(条形图组)
MPAndroidChart的详细使用——HorizontalBarChart横向条形图(五)(横向条形图)
先来说一下实现堆叠柱状图的实现思路(个人想法):从外表来看堆叠柱状图像两根短柱子组成一根柱子,但是后来无意间在实现柱状图组的时候发现,如果两组数据不用barData.groupBars()
方法把两组数据隔开,那么两组数据就会重叠,而重叠的方式是:后面加上的那条数据会遮盖住前面那条数据,当你前面那条数据比后面那条数据大时,一个堆叠柱状图就实现了!
不多说,先看效果图~
XML
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/bar"
android:layout_width="match_parent"
android:layout_height="300dp">
</com.github.mikephil.charting.charts.BarChart>
Java
public class BarChartStackActivity extends AppCompatActivity {
private BarChart bar;
List<BarEntry>list;
List<BarEntry>list2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bar_chart_stack);
bar = (BarChart) findViewById(R.id.bar);
list=new ArrayList<>();
list2=new ArrayList<>();
//为第一组添加数据
list.add(new BarEntry(1,12));
list.add(new BarEntry(2,11));
list.add(new BarEntry(3,14));
list.add(new BarEntry(4,16));
list.add(new BarEntry(5,10));
//为第二组添加数据
list2.add(new BarEntry(1,8));
list2.add(new BarEntry(2,6));
list2.add(new BarEntry(3,10));
list2.add(new BarEntry(4,14));
list2.add(new BarEntry(5,9));
BarDataSet barDataSet=new BarDataSet(list,"男");
barDataSet.setColor(Color.RED); //为第一组柱子设置颜色
BarDataSet barDataSet2=new BarDataSet(list2,"女");
barDataSet2.setColor(Color.BLUE); //为第二组柱子设置颜色
BarData barData=new BarData(barDataSet); //加上第一组
//重点!!! 加上第二组(多组也可以用同样的方法) 一定是以数据大小的降序添加
barData.addDataSet(barDataSet2);
bar.setData(barData);
barData.setBarWidth(0.2f);//柱子的宽度
bar.getAxisLeft().setAxisMaximum(18); //Y轴最大数值
bar.getAxisLeft().setAxisMinimum(0); //Y轴最小数值
//Y轴坐标的个数 第二个参数一般填false true表示强制设置标签数 可能会导致X轴坐标显示不全等问题
bar.getAxisLeft().setLabelCount(18,false);
bar.getXAxis().setAxisMaximum(6); //X轴最大数值
bar.getXAxis().setAxisMinimum(0); //X轴最小数值
//X轴坐标的个数 第二个参数一般填false true表示强制设置标签数 可能会导致X轴坐标显示不全等问题
bar.getXAxis().setLabelCount(6,false);
bar.getDescription().setEnabled(false); //右下角一串英文字母不显示
bar.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM); //X轴的位置设置为下 默认为上
bar.getAxisRight().setEnabled(false); //右侧Y轴不显示 默认为显示
}
}