I am posting solution, in case anyone needs it in future. Thanks to @Eric for helping me out.
HumanReadableFormatter.h
@interface HumanReadableFormatter : NSNumberFormatter
{
NSNumberFormatter *numberFormatter;
}
@end
HumanReadableFormatter.m
@implementation HumanReadableFormatter
static const char sUnits[] = { '\0', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y' };
static int sMaxUnits = sizeof sUnits - 1;
-(id)init
{
if(self = [super init])
{
numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
numberFormatter.maximumFractionDigits = 1;
numberFormatter.minimumFractionDigits = 1;
}
return self;
}
-(NSString *) stringForObjectValue:(id)obj
{
int multiplier = 1000;
int exponent = 0;
double bytes = [(NSNumber *)obj doubleValue];
while ((bytes >= multiplier) && (exponent < sMaxUnits)) {
bytes /= multiplier;
exponent++;
}
NSString *convertedStr = [NSString stringWithFormat:@"%@ %c", [numberFormatter stringFromNumber: [NSNumber numberWithDouble: bytes]], sUnits[exponent]];
return convertedStr;
}
@end
To use in graph, you need 2 lines of code:
HumanReadableFormatter *formatter = [[HumanReadableFormatter alloc] init];
YAxis.labelFormatter = formatter;