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

weixin_34234823發表於2017-11-06

目錄

第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,文件可以在下載找到:

相關文章