2011-11-09 25 views
2

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

但是:
如果MOC变化不是由于插入新的数据(大于旧的),而是由于删除数据(其中有样地数据阵列的最大值),其结果是完全的。绘图使用全范围 - >范围适应(缩小绘图空间范围)发生。为什么这不适用于其他方向(增加绘图空间范围)呢?

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

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

这些屏幕截图显示的情况(因为我是新来的堆栈溢出,我还没有允许张贴图片):http://gallery.me.com/timoseeberger#100038&view=grid&bgcolor=black&sel=5

1)地块的初始显示(一切都很好):
文件:screenshot_graph_initial

2)I添加新的值(200)来绘制 - >显示出界(上端)
文件:screenshot_graph_adding200

3)I从情节删除值200和150 - >积显示完全适应
文件:screenshot_graph_deleting150

4)我添加新的值(40)来绘制 - >显示出界(下端)
file:screenshot_graph_adding40

回答

1

绘图范围有一个起始位置和长度。你的位置没问题;长度使用maxDisplay - minDisplay

请确保您的小区采用的是您要更新的剧情空间:

[graph addPlot:myPlot toPlotSpace:myOwnPlotSpace]; 
+0

谢谢埃里克,指出这一点给我。这实际上是我的代码中的一个错误(导致绘图区太大)。但即使采用这种修复方法,问题仍然存在。我将添加链接到显示问题的屏幕截图。 – Timo

+0

只要我有必要的特权,我会投你的答案。 – Timo

+0

如果我已经满意地回答了您的问题,您可以“接受”答案。 –

3

最终,我找到了该问题的原因以及如何解决它:
我删除从法这条线“setYAxisValueRange”:

myOwnPlotSpace.globalYRange = myOwnPlotSpace.yRange; 

设置globalYRange到当前的y范围在启动时保持来自适当更新其显示当所述电流范围和globalYRange被改变以后的曲线图。它似乎在内部存储了globalYRange的初始值直到时间结束。
我不知道这是CorePlot中的错误,还是我对其用法缺乏了解。
无论哪种方式,修复工作适合我。我不需要设置globalYRange,因为我通过委托方法“plotSpace:willChangePlotRangeTo:forCoordinate:”保持垂直滚动的情节。“

我希望我的回答对任何人落在同一个坑里有帮助。
如果有人对这个问题有更详细的解释,我很想阅读它。

+0

这是设计。绘图空间'yRange'的任何改变都被限制为'globalYRange'。为避免这种情况,请在更改'yRange'之前将'globalYRange'设置为零,然后重置。 'xRange'和'globalXRange'行为方式相同。 –

+0

谢谢你的解释。我将在未来的发展中牢记这一点。 – Timo

相关问题