JFreechart Realtime Combined Plot - 如果没有收到数据点,则渲染步骤子图的先前值
Posted
技术标签:
【中文标题】JFreechart Realtime Combined Plot - 如果没有收到数据点,则渲染步骤子图的先前值【英文标题】:JFreechart Realtime Combined Plot - Rendering the previous value for a step subchart if no data point has been received 【发布时间】:2010-11-12 08:02:51 【问题描述】:我在 JFreechart 中有一个组合图,由 4 个时间序列图表组成,具有一个共同的时域轴。
子图的数据以不同的速率到达。例如,我可能每几毫秒接收一次价格变化事件,每分钟接收一次头寸变化。我目前正在使用 XYStepRenderer 渲染这些系列以生成步骤图表。
我希望能够做这样的事情:
在时间 T 收到价格点并绘制在图表上 在时间 T 没有收到位置图的数据,因此我们假设该值没有改变并且呈现先前的位置值 - 即水平延伸步进线 在时间 T+1 处接收到一个位置点并绘制更改步长图 在时间 T+1 没有收到价格点,因此绘制了之前的价格在 JFreechart 中是否有任何简单的方法可以做到这一点?目前我有一个可行的实现,但这不能处理呈现假定值。
我最初的想法是更改数据模型,以便我可以快速找到以前的值并更改调用以告诉每个子图在收到任何图的事件时进行绘制。
【问题讨论】:
【参考方案1】:我认为您需要缓冲传入的更改并应用规则集以将更改转发到 JFreeChart(顺便说一句,这并不真正推荐用于实时工作,但我发现对于低频更新它工作得很好)。
我猜你有一个价格数据集和一个仓位数据集。您的头寸和价格更新是否带有时间戳?如果没有,您将遇到按顺序接收这些并尝试将它们捆绑起来的问题(也许在某个时间窗口内到达的更新映射到同一时间?)。如果它们确实有时间戳,那么您可以在价格出现时推导出一个新位置(与旧位置相同),然后在需要时替换它。
无论发生什么情况,我都会将图表更新与头寸/价格更新脱钩,以防万一您被头寸/价格变化所淹没。您不希望将其转化为必须立即丢弃的多个图表更新。
【讨论】:
感谢您的建议布赖恩。我正在接收时间戳,因此我能够自己控制图表的更新。当我实际上没有收到任何新数据时,我想要避免的是在图表上绘制点(即标记)。作为一个快速廉价的 hack,我对 XYStepLine 渲染类进行了子类化,以便为数据集中的最后一个点绘制一条延长线。随着系列的新点到达,这条线得到纠正。我打算创建一种图表数据缓存以允许重放旧数据,并且可能会将您的建议纳入此服务。 优秀。很高兴这是有用的以上是关于JFreechart Realtime Combined Plot - 如果没有收到数据点,则渲染步骤子图的先前值的主要内容,如果未能解决你的问题,请参考以下文章