核心图,用json数据绘制散点图。

时间:2014-01-09 19:07:53

标签: ios objective-c json core-plot

我是CorePlot的新手并且在理解“数据源”方面遇到了一些麻烦。我确信我很可能误解了一些功能。现在,我正在尝试显示我已经获得并保存到_soldarray_datearray的2个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)索引的工作原理。提前谢谢!

1 个答案:

答案 0 :(得分: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;
}