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;
}

関連する部分は、正しいと思われる値の n 配列を返す CPTBarPlotFieldBarLocation のケースです...

数値 = (0、86400、172800、259200、345600、432000、518400)

4

2 に答える 2

0

フォーマッタ コードは正しいようです。データソースが正しい x 値 (0、86400、172800 など) を 1 日間隔で返していることを確認してください。

于 2013-10-08T00:42:47.090 に答える
0

私はそれを考え出した。私は設定しなければならなかった

x.majorIntervalLength = CPTDecimalFromInteger(secondsPerDay);

このバグは私を混乱させました.xラベルの繰り返しを除いてすべてが完璧に見えたので、何かが間違っていることを確認するのは困難でした. 間隔の長さを適切な値に設定すると、X 軸のラベルに必要な日付が正しく表示されました。

于 2013-10-08T05:37:28.557 に答える