散点图中的新数据未显示在边界内

时间:2011-11-09 00:18:48

标签: ipad core-plot

我在我的iPad应用程序中使用coreplot库0.9 在这里,我使用具有固定y范围的散点图(在y方向上没有滚动),即绘图空间范围=全局范围(参见下面的源代码)。
当新数据可用时(MOC观察)我将数据添加到绘图的数据数组(散点图),确定所需的新y范围(数据数组中的最小/最大值)并重新加载整个图。
如果新数据的值大于其他值,则绘图会将其显示为超出范围,尽管绘图空间已适应新范围。

但:
如果MOC更改不是由于插入新数据(大于旧数据)而是由于删除数据(在绘图数据数组中具有最大值),则结果是完美的:绘图使用全范围 - &gt ;范围适应(减小绘图空间范围)发生。为什么这不适用于另一个方向(增加绘图空间范围)?

我真的被困在这里,如果有人可以帮助我,我会很高兴。谢谢。

-(void) mocChangeNotification:(NSNotification *)notification
{
    ...
    [self performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:NO];  
}

- (void) setYAxisValueRange
{
    ...
    myOwnPlotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(minDisplay)
                                                         length:CPTDecimalFromFloat(maxDisplay)];
    // disable "scrolling" in y-direction
    myOwnPlotSpace.globalYRange = myOwnPlotSpace.yRange;
}

- (void) refresh
{
    [dataForPlot removeAllObjects];
    [self preparePlotData]; // put data into plot's data array
    [self setYAxisValueRange]; // looks for min / max values in data
    [myPlot reloadData];
}

这些截图显示了这种情况(因为我不熟悉Stack Overflow,我还不允许发布图片):http://gallery.me.com/timoseeberger#100038&view=grid&bgcolor=black&sel=5

1)初步显示情节(一切都很好):
file:screenshot_graph_initial

2)我在绘图中添加新值(200) - >显示越界(上端)
file:screenshot_graph_adding200

3)我从绘图中删除值200和150 - >情节显示完美适应
file:screenshot_graph_deleting150

4)我在剧情中添加新值(40) - >显示越界(下端)
file:screenshot_graph_adding40

2 个答案:

答案 0 :(得分:3)

最终,我找到了行为的原因以及如何解决这个问题:
我从方法“setYAxisValueRange”中删除了这一行:

myOwnPlotSpace.globalYRange = myOwnPlotSpace.yRange;  

在启动时将globalYRange设置为当前y范围会使图形在以后更改当前范围和globalYRange时无法正确更新其显示。它似乎在内部存储globalYRange的初始值,直到时间结束 我不知道这是不是CorePlot中的错误,或者我只是对它的用法缺乏了解 无论哪种方式,修复程序对我来说都很好。我无论如何都不需要设置globalYRange,因为我通过委托方法“plotSpace:willChangePlotRangeTo:forCoordinate:”来保持垂直滚动的情节。

我希望我的回答对任何陷入同一个坑的人都有帮助 如果有人对此问题有更详细的解释,我很想读它。

答案 1 :(得分:1)

绘图范围具有起始位置和长度。你的位置还可以。使用maxDisplay - minDisplay作为长度。

确保您的绘图使用您正在更新的绘图空间:

[graph addPlot:myPlot toPlotSpace:myOwnPlotSpace];