我在我的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
答案 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];