Available since v1.6.2 – changed (improved) in v2.1.4

Video Tutorials

If you are interested in detailed video tutorials (📹 | 🖥️), have a look at the downloads. These videos made by the developer of the library e.g. explain how you format values in the chart and on the axis in detail. Source code is also included.

ValueFormatter

The ValueFormatter class can be used to create custom-made formatter classes that allow to format values within the chart (from DataSets or from the axes) in a specific way before drawing them.

For using the ValueFormatter, simply create a new class that extends it and then override whatever functions you need. The ValueFormatter provides different functions for formatting entries from the individual chart types and axes.

If no function is overridden, the ValueFormatter will return the default formatting which is usually a String representation of the y value of the entry (or axis label).

Creating a ValueFormatter (Charts and YAxis)

The following formatter provides customized formatting for Line- and BarChart entries, as well as for formatting axis (YAxis) values:

class MyValueFormatter : ValueFormatter() {

    private val format = DecimalFormat("###,##0.0")

    // override this for e.g. LineChart or ScatterChart
    override fun getPointLabel(entry: Entry?): String {
        return format.format(entry?.y)
    }

    // override this for BarChart
    override fun getBarLabel(barEntry: BarEntry?): String {
        return format.format(barEntry?.y)
    }

    // override this for custom formatting of XAxis or YAxis labels
    override fun getAxisLabel(value: Float, axis: AxisBase?): String {
        return format.format(value)
    }

    // ... override other methods for the other chart types
}

Creating a ValueFormatter (XAxis)

The following formatter is designed for formatting the values of the XAxis with days of the week. Notice that the axis value is safely casted to integer and used as the array index. Also, you need to make sure the length of the array corresponds to the range of values the chart displays on the XAxis.

class MyXAxisFormatter : ValueFormatter() {

    private val days = arrayOf("Mo", "Tu", "Wed", "Th", "Fr", "Sa", "Su")

    override fun getAxisLabel(value: Float, axis: AxisBase?): String {
        return days.getOrNull(value.toInt()) ?: value.toString()
    }
}

Then, set your formatter to the ChartData or DataSet object for formatting data values:

// usage on whole data object (e.g. LineData)
lineData.setValueFormatter(MyValueFormatter())

// usage on individual dataset object (e.g. LineDataSet)
lineDataSet.valueFormatter = MyValueFormatter()

Or, set your formatter on the XAxis or YAxis for formatting axis values:

// XAxis
chart.xAxis.valueFormatter = MyXAxisFormatter()

// left YAxis
chart.leftAxis.valueFormatter = MyValueFormatter()

Predefined Formatters

  • LargeValueFormatter: Can be used for formatting large values > “1.000”. It will turn values like “1.000” into “1k”, “1.000.000” will be “1m” (million), “1.000.000.000” will be “1b” (billion) and values like one trillion will be e.g. “1t”.
  • PercentFormatter: Used for displaying a “%” sign after each value with 1 decimal digit. Especially useful for the PieChart. 50 -> 50.0 %
  • StackedValueFormatter: A formatter specifically designed to be used with stacked BarChart. It allows to specify whether all stack values should be drawn or just the top value.

Important notice

Since release v3.1.0, there are no longer any separate formatters for axis values and chart data values, they are both now formatted by ValueFormatter.