最新消息:文章中包含代码时,请遵守代码高亮规范!

【原创】使用MPAndroidChart柱状图遇到的问题

Android 王 伟 487浏览 0评论

在使用MPAndroidChart的BarChart时遇到一个很大的问题是很多方法不知道具体的意思,还有柱状和对应的下标不在同一个位置。
在这里说一下方法的意思以及为什么会出现下标和柱状不在同一个位置。
首先说一下一些方法的意思:

mBarChart.getDescription().setEnabled(false);//设置描述
mBarChart.setPinchZoom(true);//设置按比例放缩柱状图
//x坐标轴设置
final XAxis xAxis = mBarChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//显示位置
xAxis.setDrawGridLines(false);//是否绘制x轴的网格线
xAxis.setGranularity(1f);//设置轴值之间的最小间隔
xAxis.setLabelCount(xAxisValues.size());//设置标签的数量
xAxis.setCenterAxisLabels(true);//设置标签居中
/**
* 这个方法是下标转换成我们需要显示的内容,其中xValuse[]是x轴下标数组。
*/
xAxis.setValueFormatter(new IAxisValueFormatter() {
     @Override
     public String getFormattedValue(float v, AxisBase axisBase) {
          for (int i = 0; i < xValues.length; i++) {
              if (v == i) {
                  return xValues[i];
              }
           }
           return "";
      }
});

//y轴设置
YAxis leftAxis = mBarChart.getAxisLeft();
leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);//在y轴外面显示
leftAxis.setDrawGridLines(true);//显示Y轴网格线
leftAxis.setDrawLabels(true);//显示Y轴标签
leftAxis.setDrawAxisLine(true);//是否画Y轴线
leftAxis.setGranularity(1f);//设置轴值之间的最小间隔
leftAxis.setGridLineWidth(1f);//设置网格线的宽度
leftAxis.setAxisMaximum(4);//这是最大值4
leftAxis.setAxisMinimum(0);//设置最小值0

//图例设置
Legend legend = mBarChart.getLegend();
legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);//设置标签显示的水平位置当前为左边
legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);//设置标签显示的垂直位置当前为顶部
legend.setOrientation(Legend.LegendOrientation.HORIZONTAL);//设置标签是水平显示还是垂直显示
legend.setDrawInside(false);
legend.setDirection(Legend.LegendDirection.LEFT_TO_RIGHT);//设置标签描述的方式当前是从左往右
legend.setForm(Legend.LegendForm.SQUARE);
legend.setTextSize(12f);//设置标签的字体大小

下面说一下为什么会出现显示不正确的问题。
这是由于比例的不同。打个比方。你有两个柱状图,柱状图的宽度为0.6,你设置的轴值间隔为1,那个显示的就不对。因为你两个柱状宽度都1.2了。显示的标签是按最小间隔的中间显示的。所以会觉得有点偏。
这个时候你就需要计算了。
这里给出两个的例子:

float groupSpace = 0.04f;
float barSpace = 0.03f;
float barWidth = 0.45f;

(0.45 + 0.03) * 2 + 0.04 = 1,即一个间隔为一组,包含两个柱图
使用:

barChart.getBarData().setBarWidth(barWidth);
barChart.getXAxis().setAxisMaximum(barChart.getBarData().getGroupWidth(groupSpace, barSpace) * xAxisValue.size() + 0);
barChart.groupBars(0, groupSpace, barSpace);

具体的就需要你们查资料了。

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/23793.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Bob的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!