MPAndroidChart - 第一个和最后一个条未正确呈现

时间:2016-08-08 20:55:05

标签: android mpandroidchart

  1. 在条形图中,我创建的第一行和最后一行一直被切成两半(即使我添加了额外的栏)。这也会导致条形图上方的值不合适。我在一个片段中膨胀这个。

  2. 轴也只增加0.9而不是1.为了解决这个问题,我需要实现AxisValueFormatter接口吗?

  3. 图像:

    enter image description here

    代码: 的.java

    chart = (BarChart) view.findViewById(R.id.chart1);
    
    // Chart settings
    chart.setDrawGridBackground(false);
    chart.setHighlightFullBarEnabled(true);
    chart.setDrawBarShadow(false);
    chart.setDrawValueAboveBar(true);
    chart.setDescription("");
    
    // Settings for X-Axis
    XAxis xAxis = chart.getXAxis();
    xAxis.setDrawGridLines(false);
    xAxis.setEnabled(true);
    xAxis.setDrawLabels(true);
    xAxis.setPosition(XAxisPosition.BOTTOM);
    
    // Settings for Y-Axis
    YAxis leftAxis = chart.getAxisLeft();
    YAxis rightAxis = chart.getAxisRight();
    
    leftAxis.setAxisMinValue(0f);
    rightAxis.setAxisMinValue(0f);
    
    BARENTRY = new ArrayList<>();
    
    BarEntryLabels = new ArrayList<String>();
    
    BARENTRY.add(new BarEntry(2f, 1));
    BARENTRY.add(new BarEntry(3f, 2));
    BARENTRY.add(new BarEntry(4f, 3));
    BARENTRY.add(new BarEntry(5f, 4));
    BARENTRY.add(new BarEntry(6f, 5));
    
    Bardataset = new BarDataSet(BARENTRY, "Projects");
    
    Bardataset.setColors(ColorTemplate.COLORFUL_COLORS);
    
    BARDATA = new BarData(Bardataset);
    
    chart.setData(BARDATA);
    chart.invalidate(); // refresh
    
    chart.animateY(1500);
    
    return view;
    

4 个答案:

答案 0 :(得分:23)

回答你的问题:

  1. 为了正确显示您的酒吧,您需要适合这些酒吧,如此(不要问我为什么它默认不启用):

    chart.setFitBars(true)
    

    您可以在BarChart javadocs中找到更多信息:

      

    setFitBars(boolean enabled):将条形宽度的一半添加到x轴范围的每一边,以便完整显示条形图的条形。

    如果你有CombinedChart,可以使用setSpaceMin()setSpaceMax()在轴的两端添加额外的间距:

    XAxis xAxis = chart.getXAxis();
    xAxis.setSpaceMin(barData.getBarWidth() / 2f);
    xAxis.setSpaceMax(barData.getBarWidth() / 2f);
    
  2. 目前无法影响轴上呈现的值位置。创建ValueFormatter仅更改显示的文本,而不是标签的实际位置。

答案 1 :(得分:2)

如果问题仅在于第一个条形,则可以使用最小轴的负值:

xAxis.setAxisMinimum(-0.5f);

this question here的答案相似:

答案 2 :(得分:1)

请使用setAxisMinimumsetAxisMaximum,它会完美运作!

实例化BarData后,您只需要

chart.getXAxis().setAxisMinimum(-data.getBarWidth() / 2);
chart.getXAxis().setAxisMaximum(count-data.getBarWidth() / 2);`

不需要setFitBars,并且计数大小为BARENTRY

答案 3 :(得分:0)

我刚刚修复了它,使用

设置了x范围的最小值
  barChart.setFitBars(true);
  barChart.setVisibleXRangeMinimum(barEntries.size());