MPAndroidChart - Adding labels to bar chart

前端 未结 4 2032
北恋
北恋 2020-11-30 09:01

It is necessary for my application to have a label on each bar of the bar chart. Is there a way to do this with MPAndroidChart? I could not find a way to do this on the proj

相关标签:
4条回答
  • 2020-11-30 09:29

    you can set the column label above by adding this line

    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    
    0 讨论(0)
  • 2020-11-30 09:31

    For version of implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'

    you can set labels with below snippet.

    final ArrayList<String> xAxisLabel = new ArrayList<>();
        xAxisLabel.add("Sun");
        xAxisLabel.add("Mon");
        xAxisLabel.add("Tue");
        xAxisLabel.add("Wed");
        xAxisLabel.add("Thu");
        xAxisLabel.add("Fri");
        xAxisLabel.add("Sat");
    
    
        XAxis xAxis = chart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM_INSIDE);
    
        ValueFormatter formatter = new ValueFormatter() {
    
    
            @Override
            public String getFormattedValue(float value) {
                return xAxisLabel.get((int) value);
            }
        };
    
        xAxis.setGranularity(1f); // minimum axis-step (interval) is 1
        xAxis.setValueFormatter(formatter);
    
    0 讨论(0)
  • 2020-11-30 09:49

    You can use IndexAxisValueFormatter to make things easier.

    final String[] labels = new String[] {"Dummy", "Jan", "Feb", "March", "April", "May",
        "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"};
    xAxis.setValueFormatter(new IndexAxisValueFormatter(labels));
    xAxis.setGranularity(1f);
    xAxis.setGranularityEnabled(true);
    
    0 讨论(0)
  • 2020-11-30 09:55

    Updated Answer (MPAndroidChart v3.0.1)

    Being such a commonly used feature, v3.0.1 of the library added the IndexAxisValueFormatter class exactly for this purpose, so it's just one line of code now:

    mBarChart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(labels));
    

    The ProTip from the original answer below still applies.

    Original Answer (MPAndroidChart v3.0.0)

    With v3.0.0 of the library there is no direct way of setting labels for the bars, but there's a rather decent workaround that uses the ValueFormatter interface.

    Create a new formatter like this:

    public class LabelFormatter implements IAxisValueFormatter {
        private final String[] mLabels;
    
        public LabelFormatter(String[] labels) {
            mLabels = labels;
        }
    
        @Override
        public String getFormattedValue(float value, AxisBase axis) {
            return mLabels[(int) value];
        }
    }
    

    Then set this formatter to your x-axis (assuming you've already created a String[] containing the labels):

    mBarChart.getXAxis().setValueFormatter(new LabelFormatter(labels));
    

    ProTip: if you want to remove the extra labels appearing when zooming into the bar chart, you can use the granularity feature:

    XAxis xAxis = mBarChart.getXAxis();
    xAxis.setGranularity(1f);
    xAxis.setGranularityEnabled(true);
    
    0 讨论(0)
提交回复
热议问题