【问题标题】:Refresh core plot scatterplot刷新核心图散点图
【发布时间】:2014-06-22 20:02:01
【问题描述】:

我有一个使用 Core Plot (v 1.5) 创建的散点图。数据源是一个包含 (x, y, value) 的字典。我希望能够动态调整要绘制的 (x, y) 对的数量。但是,在我更改数据源中包含的 (x, y) 对的数量之后,我的 graphHostingView 不会刷新散点图,直到我调整窗口大小。当我调整窗口大小时,会加载并绘制新值。我尝试了几种解决方案,包括:

  • [graph reloadData]
  • [scatterplotview setNeedsDisplay:YES]
  • 强制调用:[self.myScatterPlot.plotItem renderInView:self.myScatterPlot.hostingView withTheme:nil animated:NO withData:nil];

没有成功。任何人都可以建议一种方法,使我的散点图能够在值更改或向我发送示例链接时动态更新?提前致谢。干杯,特隆德

【问题讨论】:

    标签: objective-c cocoa core-plot


    【解决方案1】:

    有几种方法可以告诉核心绘图您有新数据可用:

    • -reloadData:用新数据点替换所有绘图数据。在图表上调用此方法会导致图表中的所有图表重新加载其数据。

    • -reloadDataInIndexRange::用新值替换给定索引范围内的绘图数据,使该范围外的点保持不变。

    • -insertDataAtIndex:numberOfRecords::在给定索引处插入新数据点,根据需要将现有数据点移动到更高的索引。

    • -deleteDataInIndexRange::删除给定范围内的现有数据并移动现有数据点以缩小差距。

    绘图库 示例应用程序中的“实时绘图”演示使用这些方法来更新其数据。该演示使用计时器生成随机绘图数据,但您的新数据可以来自任何地方。

    【讨论】:

    • 感谢您的回答埃里克。我研究了“实时绘图”示例,我现在使用 reloadData 让它工作。但是,从我要绘制的数据更新到实际显示新数据(5-50 个散点)的绘图大约需要 5-10 秒。它几乎就像绘图被暂停,直到达到某个触发器。你知道这可能是什么,或者是否有办法强制 runloop 立即重绘? T.
    • 我提到的所有方法都强制情节在下一次通过核心动画渲染周期重绘。确保您从主线程调用它们,并且您的数据源在将数据返回到绘图之前不会花费大量时间来处理数据。在通知绘图(通过上述方法)新数据可用之前,应进行任何预处理。
    • 原来我是从与主线程不同的线程调用该方法的。更改为主线程解决了我的问题。谢谢!
    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多