2014-01-09 2 views
0

Я новичок в CorePlot и немного затрудняюсь понять «источник данных». Я уверен, что я, скорее всего, неправильно истолковал некоторые функции. Прямо сейчас, я пытаюсь отобразить 2 json-данных, которые я уже получил и сохранил в _soldarray и _datearray.Core Plot, построение диаграммы рассеяния с данными json.

пример данных, полученных (как это делается на NSLog):

_soldarray : {0, 0, 0, "62.69", "48.3", 81,} 
_datearray : {("02/07/12", "02/10/12", "02/14/12", "02/11/12", "02/10/12", "02/12/12"} 

и я

CPTPlotDataSource methods 
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot { 
return [_soldarray count]; 
} 

-(NSArray *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSUInteger)index { 

switch (fieldEnum) { 
    case CPTScatterPlotFieldX: 

     for (int i =0 ; 50;i++){ 
      return [_datearray objectAtIndex:i]; 
     } 
     break; 

    case CPTScatterPlotFieldY: 
     for (int j =0 ; 50;j++){ 
      return [_soldarray objectAtIndex:j]; 
     } 

     break; 
} 
return 0; 

}

и, как для конфигурации:

CPTGraph *graph = self.hostView.hostedGraph; 
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace; 
// 2 - Create the three plots 
CPTScatterPlot *aaplPlot = [[CPTScatterPlot alloc] init]; 
aaplPlot.dataSource = self; 
aaplPlot.identifier = _soldarray; 
CPTColor *aaplColor = [CPTColor redColor]; 
[graph addPlot:aaplPlot toPlotSpace:plotSpace]; 

Я попытался изменить данные к массиву, но это не работает. Может кто-то указать мне на правильные направления. У меня возникли проблемы с пониманием того, как plot.datasource и как работает индекс -(NSArray *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndexRange:(NSUInteger). Заранее спасибо!

ответ

0

-numbersForPlot:field:recordIndexRange: ожидает, что источник данных вернет массив значений для данного поля, в то время как -numberForPlot:field:recordIndex: возвращает по одному значению за данный индекс.

Предполагая, что значения в массивах NSNumber объекты (или что-то другое, что отвечает на -decimalValue или -doubleValue как NSString), вы можете реализовать это в любом случае.

-(NSNumber *)numberForPlot:(CPTPlot *)plot 
        field:(NSUInteger)fieldEnum 
       recordIndex:(NSUInteger)idx 
{ 
    switch (fieldEnum) { 
     case CPTScatterPlotFieldX: 
      return [_datearray objectAtIndex:idx]; 
      break; 

     case CPTScatterPlotFieldY: 
      return [_soldarray objectAtIndex:idx]; 
      break; 
    } 
    return nil; 
} 

или

-(NSArray *)numbersForPlot:(CPTPlot *)plot 
        field:(NSUInteger)fieldEnum 
      recordIndexRange:(NSUInteger)indexRange 
{ 
    switch (fieldEnum) { 
     case CPTScatterPlotFieldX: 
      return [_datearray subarrayWithRange:indexRange]; 
      break; 

     case CPTScatterPlotFieldY: 
      return [_soldarray subarrayWithRange:indexRange]; 
      break; 
    } 
    return nil; 
} 
+0

привет, спасибо за помощь. он по-прежнему не является графическим. ты думаешь, мне нужно преобразовать свой массив в nsnumbers ?? – user3178926

+0

У меня также есть CPTScatterPlot * aaplPlot = [[CPTScatterPlot alloc] init]; \t aaplPlot.dataSource = self; \t aaplPlot.identifier = _soldarray; Я не уверен, должен ли идентификатор быть массивом, потому что я не уверен, что на самом деле идентификатор и источник данных – user3178926

+0

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

Смежные вопросы