Reputation: 648
I want to display couple of points on a highcharts line chart which are big numbers.
e.g. 100,000, 10,000,000, 1,000,000,000
When I display these, the y axis automatically formats the number into 100 k, 10 M, 1,000 M etc but the tooltip still shows the actual big number.
Is it possible to show 1,000,000,000 as 1 B or 1000 M in the tooltip itself.
Example - http://jsfiddle.net/ynCKW/1/
I am trying to play with the numberFormat function but I dont think its the right function.
Highcharts.numberFormat(this.y,0)
Do I have to write a custom function which would do this formatting in the tooltip?
Upvotes: 7
Views: 10078
Reputation: 45079
You can use the same logic as implemented in Highcharts core:
tooltip: {
formatter: function () {
var ret = '',
multi,
axis = this.series.yAxis,
numericSymbols = ['k', 'M', 'G', 'T', 'P', 'E'],
i = numericSymbols.length;
while (i-- && ret === '') {
multi = Math.pow(1000, i + 1);
if (axis.tickInterval >= multi && numericSymbols[i] !== null) {
ret = Highcharts.numberFormat(this.y / multi, -1) + numericSymbols[i];
}
}
return ret;
}
},
And jsFiddle: http://jsfiddle.net/ynCKW/2/
EDIT for Highcharts v6:
We can call build-in method, which should be easier to maintain: http://jsfiddle.net/BlackLabel/ynCKW/104/
tooltip: {
valueSuffix: '',
formatter: function () {
var axis = this.series.yAxis;
return axis.defaultLabelFormatter.call({
axis: axis,
value: this.y
});
}
},
Upvotes: 6
Reputation: 716
Piggybacking off @Pawel Fus, a slight tweak allows you to have negative currency values as well but with the negative outside the $
(i.e. -$100K
versus -$-100k
).
function () {
var isNegative = this.value < 0 ? '-' : '';
var absValue = Math.abs(this.value);
return isNegative + '$' + this.axis.defaultLabelFormatter.call({
axis: this.axis,
value: absValue
});
}
Here is a jsFiddle: http://jsfiddle.net/4yuo9mww/1/
Upvotes: 2