How can I have tick marks in Core Plot with custom labels?
For my app's graph (line plots) it does not make sense to format the axis labels to tenths. It did not loo开发者_JAVA百科k like there was a way to change this without providing custom labels.
I was able to add custom axis labels based on the sample code in this answer, but the labels do not have tick marks.
Is this an issue (I didn't see anything here) or am I missing something?
If you want numeric labels with a format different than the default, create an NSNumberFormatter
object, set it to whatever format you need, and assign it to the labelFormatter
property on the axis.
Check out the CPTimeFormatter
class if you need to format the labels as dates and/or times.
Derive a class from NSNumberFormatter
(e.g. MyFormatter
) and override stringForObjectValue:
- (NSString *)stringForObjectValue:(NSDecimalNumber *)coordinateValue {
return @"MyLabel";
}
Then set the labelFormatter property of your axis to an instance of MyFormatter
, e.g.:
MyFormatter *formatter = [[MyFormatter alloc] init];
x.labelFormatter = formatter;
[formatter release];
This worked for me!
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:0];
y.labelFormatter = formatter;
You can also swizzle the method in category like this:
#import "NSNumberFormatter+BigNumber.h"
#import <objc/runtime.h>
static Method origStringFromNumberMethod = nil;
@implementation NSNumberFormatter (BigNumber)
-(NSString *)stringFromBigNumber:(NSNumber*)number{
int result = 0;
int level = 1;
NSString *format = @"";
if([number integerValue] >= 1000000000) {
level = 1000000000;
format = @"b";
}
if([number integerValue] >= 1000000) {
level = 1000000;
format = @"m";
}
if([number integerValue] >= 1000){
level = 1000;
format = @"k";
}
result = [number integerValue]/level;
NSString *kValue = [NSString stringWithFormat:@"%d%@",result,format];
return kValue;
}
+ (void)initialize {
origStringFromNumberMethod = class_getClassMethod(self, @selector(stringFromNumber:));
method_exchangeImplementations(origStringFromNumberMethod,
class_getClassMethod(self, @selector(stringFromBigNumber:)));
}
@end
精彩评论