我有一张使用Core-plot(CPTBarPlot)的图表,我希望在X轴上显示日期,按顺序显示每个条形图的不同日期。我试图按如下方式设置CPTTimeFormatter,其中x是我的x轴。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init] ;
dateFormatter.dateStyle = kCFDateFormatterMediumStyle;
CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter];
NSDate *refDate = [NSDate date];
timeFormatter.referenceDate = refDate;
x.labelFormatter = timeFormatter;
在numbersForPlot内部我返回一组代表经过的秒数的数字,因为我想连续几天它看起来像0, 86400, 172800, 259200, 345600, 432000, 518400 等。
我希望在这种情况下X轴标签是从refDate开始并按numberForPlot中的秒数上升的日期的顺序列表。相反,我看到的是x轴上每个条形图一遍又一遍地重复的日期。任何人都可以向我解释我做错了什么以及我怎么能解决它?感谢。
编辑:这就是我的数据源中我的numbersForPlot函数:
-(NSArray *)numbersForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSRange)indexRange
{
NSArray *nums = nil;
switch ( fieldEnum ) {
case CPTBarPlotFieldBarLocation:
nums = [NSMutableArray arrayWithCapacity:indexRange.length];
for ( NSUInteger i = indexRange.location; i < NSMaxRange(indexRange); i++ ) {
[(NSMutableArray *)nums addObject :[NSDecimalNumber numberWithUnsignedInteger:i*secondsPerDay]];
}
NSLog(@"NUMS = %@",nums);
break;
case CPTBarPlotFieldBarTip:
nums = [stepsPerDay objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:indexRange]];
break;
default:
break;
}
return nums;
}
相关部分是案例CPTBarPlotFieldBarLocation,它返回我认为正确的值数组......
NUMS =( 0, 86400, 172800, 259200, 345600, 432000, 518400 )
答案 0 :(得分:0)
您的格式化程序代码看起来正确。确保数据源返回正确的x值,例如0,86400,172800等,以获取相隔一天的值。
答案 1 :(得分:0)
我明白了。我不得不设置
x.majorIntervalLength = CPTDecimalFromInteger(secondsPerDay);
这个错误使我感到困惑,因为一切看起来都很完美,减去x标签的重复,所以很难看出出现问题。一旦我将间隔长度设置为正确的值,X轴标签就会正确显示我想要的日期。