我正在使用核心图来绘制约2000个数据点。它们加载很好,但我只能看到一条平滑的线条:
我不确定为什么它只是一条扁平线,而不是显示我所有值都在大范围内的图表。我是否在设置绘图空间时做错了什么?
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;
}
我在这里做错了什么想法?
答案 0 :(得分:4)
这里有几个不同的问题:
绘图空间范围以数据坐标给出。您可以自己计算范围,也可以使用绘图空间方法-scaleToFitPlots:
自动计算范围。请参阅核心图讨论板上your related question的答案,了解如何手动计算范围。
您的-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;
}
埃里克