2009-07-20 6 views
2

У меня есть комбинированный график в JFreechart, состоящий из 4 временных диаграмм с общей осью временной области.JFreechart Realtime Combined Plot - рендеринг предыдущего значения для шага подкарта, если не получена точка данных

Данные для подзаговоров поступают с разной скоростью. Например, я могу получать событие изменения цены каждые пару миллисекунд и изменение позиции каждую минуту. В настоящее время я делаю эти серии с XYStepRenderer для создания диаграмм шагов.

Я хотел бы быть в состоянии сделать что-то вроде этого:

  • Точка Цена принимается в момент времени T и строится на графике
  • Нет данных получено не было в момент времени T для позиции диаграмму и поэтому мы предполагаем, что значение не изменилось, а предыдущее значение позиции визуализировано, то есть расширение горизонтальной линии горизонтально
  • В момент времени T + 1 принимается позиция и отображается график изменения шага
  • Время T + 1 никакой ценовой точки не получено, и поэтому p повторное значение рассчитывается

Есть ли простой способ сделать это в JFreechart? В настоящее время у меня есть рабочая реализация, но это не обрабатывает отображение принятых значений.

Мои первоначальные мысли были связаны с изменением модели данных, чтобы я мог быстро найти предыдущее значение и изменить вызовы, чтобы рассказать каждому подзаговору рисовать, когда событие получено для любого графика.

ответ

3

Я думаю, вам нужно будет буферизировать входящие изменения и применить набор правил для пересылки изменений на JFreeChart (что на самом деле не рекомендуется для работы в режиме реального времени, но я обнаружил, что для низкочастотных обновлений он работает Что ж).

Я предполагаю, что у вас есть набор данных по ценам и набору данных для позиций. Появляются ли ваши данные о положении и ценах с меткой времени? Если нет, у вас возникнет проблема с получением этих последовательностей и попыткой связать их (возможно, обновления, поступающие в определенную карту timewindow в одно и то же время?). Если у них есть отметки времени, тогда вы можете получить новую позицию (такую ​​же, как и старая позиция), когда цена придет, а затем заменить это, если потребуется.

Я бы отделил обновление диаграммы от изменений положения/цены, что бы ни случилось, на всякий случай, если вы завалитесь изменениями позиции/цены. Вы не хотите, чтобы это переводилось на несколько обновлений диаграмм, которые вам нужно будет немедленно выбросить.

+0

Спасибо за ваше предложение Брайан. Я получаю временные метки, и поэтому я могу контролировать обновления на диаграмме. То, что я хотел избежать, заключалось в построении точек (т. Е. Маркеров) на графиках, когда я фактически не получил никаких новых данных. В качестве быстрого дешевого взлома я подклассифицировал класс рендеринга XYStepLine, чтобы нарисовать расширенную строку для последней точки в наборе данных. Эта строка исправляется по мере поступления новых точек для серии. Я собираюсь ухаживать за созданием типа кэша данных диаграммы, чтобы разрешить повторную передачу старых данных и, скорее всего, включить ваши предложения в эту службу. – pjp

+0

Отлично. Рад, что это было полезно –