CorePlot - CPTTimeFormatter为我的条形图的每个元素提供了相同的时间

时间:2013-10-07 05:36:05

标签: ios cocoa-touch graph core-plot

我有一张使用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 )

2 个答案:

答案 0 :(得分:0)

您的格式化程序代码看起来正确。确保数据源返回正确的x值,例如0,86400,172800等,以获取相隔一天的值。

答案 1 :(得分:0)

我明白了。我不得不设置

x.majorIntervalLength = CPTDecimalFromInteger(secondsPerDay);

这个错误使我感到困惑,因为一切看起来都很完美,减去x标签的重复,所以很难看出出现问题。一旦我将间隔长度设置为正确的值,X轴标签就会正确显示我想要的日期。