Core Plot生成扁平线,X或Y范围不正确?

时间:2010-12-01 18:26:59

标签: iphone objective-c cocoa-touch core-graphics core-plot

我正在使用核心图来绘制约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 个答案:

答案 0 :(得分:4)

这里有几个不同的问题:

  1. 绘图空间范围以数据坐标给出。您可以自己计算范围,也可以使用绘图空间方法-scaleToFitPlots:自动计算范围。请参阅核心图讨论板上your related question的答案,了解如何手动计算范围。

  2. 您的-numberForPlot:field:recordIndex:会忽略字段参数。您为 CPScatterPlotFieldX CPScatterPlotFieldY 返回相同的值,因此是对角线。

  3. 一种可能的解决方案:

    -(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;
    }
    

    埃里克