2012-06-16 2 views
0

У меня возникла проблема с построением данных с использованием структуры CorePlot. У меня есть integrated it, и ниже есть образец моего кода из проекта, над которым я работаю: живой разброс диаграммы .Проблема С построением графика, если источник данных с одинаковыми данными

Если мои источники данных имеют одинаковые значения, тогда график не отображается.

Это код для построения точек:

#pragma mark - CPTPlotDataSource methods 
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot { 
    return [appDelegate.arrayLiveValues count]; 
} 

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum 
             recordIndex:(NSUInteger)index 
{ 
    NSInteger valueCount = [appDelegate.arrayLiveValues count]; 
    switch (fieldEnum) { 
     case CPTScatterPlotFieldX: 
      if (index < valueCount) { 
       return [NSNumber numberWithUnsignedInteger:index]; 
      } 
      break; 

     case CPTScatterPlotFieldY: 
      return [appDelegate.arrayLiveValues objectAtIndex:index]; 
      break; 
    } 
    return [NSDecimalNumber zero]; 
} 

Если appDelegate.arrayLiveValues массив содержит повторяющиеся значения, то это не зарисовки. Если у него разные значения, это график графика, основанный на значениях в datasource, то есть appDelegate.arrayLiveValues устанавливается уровень масштабирования графика. Я хочу знать, что внутренняя функциональность

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index method; 
+0

Предполагая, что 'arrayLiveValues' представляет собой массив чисел, это выглядит отлично. Как вы масштабируете пространство сюжета? –

+0

, если массив содержит то же число, что и каждый объект, а затем не строит. по следующему методу его наборы масштаба я думаю. [plotSpace scaleToFitPlots: [NSArray arrayWithObjects: aaplPlot, nil]]; – Srinivas

+0

Если все точки данных точно совпадают, диапазоны графиков будут иметь нулевую длину. Вам нужно будет проверить «xRange» и «yRange» после масштабирования диапазонов и настроить их по мере необходимости, чтобы ваши данные оставались видимыми во всех ситуациях. –

ответ

0

Да именно мы должны установить максимальные пределы мин в соответствии с нашими ценностями.

CGFloat xMin = 0.0f; 
    CGFloat xMax = 40.0f; //i need 40 plots 
    CGFloat yMin = 0.0f; 
    CGFloat yMax = 300.0f; // should determine dynamically based on max price 
    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xMin) length:CPTDecimalFromFloat(xMax)]; 
    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yMin) length:CPTDecimalFromFloat(yMax)]; 
Смежные вопросы