3

さまざまなチュートリアルに従って、Core-Plot を使用して散布図を作成することに成功しました。ここで、X 軸に日付を設定すると、完全に間違った日付が取得されます。私のグラフのソースは、辞書を含む配列です。ディクショナリのすべてのレコードで、ディクショナリの最初のキーは UNIX タイムスタンプで、2 番目のキーは描画する値です。次のようになります。

    (
            {
        0 = 1334152500;
        1 = 0;
    },
            {
        0 = 1334152800;
        1 = 0;
    },
            {
        0 = 1334153100;
        1 = 0;
    },

AFAIK Core-Plot 開始日とステップが必要です。この場合、開始日は 1334152500 (Wed, 11 Apr 2012 13:55:00 GMT) で、ステップは 300 秒です。300 秒ごとに新しい値が存在します。X軸を描画するために使用するコードは次のとおりです。

// this string contains the first UNIX Timestamp registered
NSString *tstamp_start = [NSString stringWithFormat:@"%@", [[[self.graphData  objectForKey:@"1"] objectAtIndex:0] objectForKey:@"0"]];
NSDate *refDate = [NSDate dateWithTimeIntervalSince1970:[tstamp_start doubleValue]];

// definition of the graph skipped...

CPTXYAxisSet *axisSet = (CPTXYAxisSet *)self.graph.axisSet;
// tInterval is previous set to 300 - float.
// here I should set the Interval between every value on graph...
axisSet.xAxis.majorIntervalLength = CPTDecimalFromFloat(tInterval);
axisSet.xAxis.axisLineStyle = axisLineStyle;
axisSet.xAxis.majorTickLineStyle = axisLineStyle;
axisSet.xAxis.minorTickLineStyle = axisLineStyle;
axisSet.xAxis.labelTextStyle = textStyle;
axisSet.xAxis.labelOffset = 3.0f;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy hh:mma"];
CPTTimeFormatter *timeFormatter = [[CPTTimeFormatter alloc] initWithDateFormatter:dateFormatter];
timeFormatter.referenceDate = refDate;
axisSet.xAxis.labelFormatter = timeFormatter;
axisSet.xAxis.labelingPolicy = CPTAxisLabelingPolicyAutomatic;
axisSet.xAxis.orthogonalCoordinateDecimal = CPTDecimalFromFloat(yAxisMin);
(...)

線は正しく表示されていますが、X 軸では「22/07/2054 06:35AM」のような値/ラベルを読み取っています。2054年?タイムゾーン (ローカル +2、UNIX +0) と CPTAxisLabelingPolicyAutomatic を考慮せずに、少なくとも 13:55 から現在の日付までの日付を読み取る必要があります。私は何が欠けていますか?

どうもありがとう!

サイモン

4

1 に答える 1

5

referenceDate、フォーマット時に各データ ポイントに適用されるオフセットです。したがって、最初のデータ ポイントの値は 2 倍になります。基準日を調整するか、データ値を変更して 0 から開始する必要があります。

NSDate *refDate = [NSDate dateWithTimeIntervalSince1970:0.0];
于 2012-04-12T00:25:26.570 に答える