0

我有一个使用 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 开始并按 numbersForPlot 中的秒数上升的日期顺序列表。相反,我看到的是同一个日期在 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;
}

相关部分是 case CPTBarPlotFieldBarLocation ,它返回我认为正确的 n 个值数组...

NUMS = (0, 86400, 172800, 259200, 345600, 432000, 518400)

4

2 回答 2

0

我想到了。我不得不设置

x.majorIntervalLength = CPTDecimalFromInteger(secondsPerDay);

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

于 2013-10-08T05:37:28.557 回答
0

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

于 2013-10-08T00:42:47.090 回答