Базовый график, генерирующий плоскую линию, диапазон X или Y неверен? - PullRequest
1 голос
/ 01 декабря 2010

Я использую основной график для построения около 2000 точек данных. Они загружаются нормально, но я вижу только плавную линию:

alt text

Я не уверен, почему это просто плоская линия, а не график всех моих значений, которые находятся в большом диапазоне. Что-то не так с настройкой пространства сюжета?

CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;
plotSpace.allowsUserInteraction = NO;
plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0.0) length:CPDecimalFromFloat(num_points)];
plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat(0.0) length:CPDecimalFromFloat(num_points)];

Вот и мой метод numberForPlot:

-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index 
{
    NSNumber *num = [sortedArray objectAtIndex:index];
    return num;
}

Есть идеи, что я здесь не так делаю?

1 Ответ

4 голосов
/ 02 декабря 2010

Здесь есть несколько разных проблем:

  1. Диапазоны пространства графика приведены в координатах данных.Вы можете рассчитать диапазоны самостоятельно или использовать метод пробел -scaleToFitPlots:, чтобы рассчитать их автоматически.Смотрите мой ответ на ваш связанный вопрос на доске обсуждений Core Plot, чтобы узнать, как рассчитать диапазоны вручную.

  2. Ваш -numberForPlot:field:recordIndex: игнорирует поле параметр.Вы возвращаете одно и то же значение для CPScatterPlotFieldX и CPScatterPlotFieldY , отсюда и диагональная линия.

Одно из возможных решений:

-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index 
{
    NSNumber *num = nil;

    switch ( fieldEnum ) {
    case CPScatterPlotFieldX:
        num = [NSNumber numberWithUnsignedInteger:index];
        break;
    case CPScatterPlotFieldY:
        num = [sortedArray objectAtIndex:index];
        break;
    }

    return num;
}

Эрик

...