10.Formatting Axis Values (AxisValueFormatter)(MPAndroidChart中文翻译)

目录

第8节.Setting Colors(MPAndroidChart中文翻译)
第9节.Formatting Data Values (ValueFormatter)(MPAndroidChart中文翻译)
第10节-Formatting Axis Values (AxisValueFormatter)(MPAndroidChart中文翻译)
第11节.General Settings & Styling(MPAndroidChart中文翻译)
第12节.Specific Settings & Styling(MPAndroidChart中文翻译)
第13节.Legend(MPAndroidChart中文翻译)
第14节.Dynamic & Realtime Data(MPAndroidChart中文翻译)
第15节. Modifying the Viewport(MPAndroidChart中文翻译)
第16节.Animations(MPAndroidChart中文翻译)
第17节. MarkerView (Popup View)(MPAndroidChart中文翻译)
第18节. The ChartData class(MPAndroidChart中文翻译)
第19节. ChartData subclasses(MPAndroidChart中文翻译)
第20节. The DataSet class (general DataSet styling)(MPAndroidChart中文翻译)
第21节. DataSet subclasses (specific DataSet styling)(MPAndroidChart中文翻译)
第22节. The ViewPortHandler(MPAndroidChart中文翻译)
第23节. Customizing the Fill-Line-Position (FillFormatter)(MPAndroidChart中文翻译)
第24节. Proguard(MPAndroidChart中文翻译)
第25节. Realm.io mobile database(MPAndroidChart中文翻译)
第26节. Creating your own (custom) DataSets(MPAndroidChart中文翻译)
第27节. Miscellaneous (more useful stuff)(MPAndroidChart中文翻译)

在v3.0.0中介绍,该接口允许在绘制前设置XAxis和YAxis的自定义格式

Creating a Formatter

实现轴上的值自定义格式化都需要创建一个类实现IAxisValueFormattera接口,如下所示.这个formatter用于将轴的值始终格式化为保留1位小数.

public class MyYAxisValueFormatter implements IAxisValueFormatter {

    private DecimalFormat mFormat;

    public MyAxisValueFormatter() {

        // format values to 1 decimal digit
        mFormat = new DecimalFormat("###,###,##0.0");
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        // "value" represents the position of the label on the axis (x or y)
        return mFormat.format(value) + " $";
    }
    
    /** this is only needed if numbers are returned, else return 0 */
    @Override
    public int getDecimalDigits() { return 1; }
}

下面的例子展示了如何将String数组中的数值绘制到轴上:

public class MyXAxisValueFormatter implements IAxisValueFormatter {

    private String[] mValues;

    public MyXAxisValueFormatter(String[] values) {
        this.mValues = values;
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        // "value" represents the position of the label on the axis (x or y)
        return mValues[(int) value];
    }
    
    /** this is only needed if numbers are returned, else return 0 */
    @Override
    public int getDecimalDigits() { return 0; }
}

Setting the Formatter

创建Formatter后,简单的将它设置给选择的轴上:

YAxis left = chart.getAxisLeft();
left.setValueFormatter(new MyYAxisValueFormatter());

String[] values = new String[] { ... };

XAxis xAxis = chart.getXAxis();
xAxis.setValueFormatter(new MyXAxisValueFormatter(values));

替换了从轴的最小值到最大值之间的默认值,轴将会显示经过格式化的特殊数据.

Restricting Intervals

如果你使用基于数组索引的formatter(像上面说的那个),设置最小间距为1是有意义的:

axis.setGranularity(1f); // restrict interval to 1 (minimum)

这将会防止绘制重复的标签(由于轴的间距<1).当缩放比例足够大的时候,将会停止计算最小间距

Predefined Formatters

  • LargeValueFormatter:用于格式化大于1,000的数值.将1,000转换为1k,1,000,000转换为1m(million),1,000,000,000转换为1b(billion),1 trillion转换为1t.
  • PercentFormatter:用于显示在一个十进制数后面增加”%”标记.尤其适用于PieChart. 50->50.0%
    *StackedValueFormatter:专门用于重叠BarChart.它语序指定显示所有的重叠的数值,还是只显示最顶部的数值.

Example Formatters

  • DayAxisValueFormatter:这个Formatter可以将提供的数值转换为日期字符串,并根据缩放变换.

LegacyFormatters

发布v3.0.0之前,XAxis和YAxis有单独的formatter,文档可以在下载找到:

    原文作者:xiaobug
    原文地址: https://www.jianshu.com/p/bfec8fe38eac
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞