2009-02-17 5 views
28

На Java graph or chart library была более ранняя тема, где JFreeChart был признан неплохим, , но, как stated in its FAQ, он не предназначен для рендеринга в реальном времени.Библиотека графиков/диаграмм в реальном времени Java?

Можно ли рекомендовать сопоставимую библиотеку, поддерживающую рендеринг в режиме реального времени? Просто базовое xy-рендеринг - например, получение сигнала напряжения от системы сбора данных и построение графика по мере его поступления (время по оси x, напряжение по оси Y).

+0

Вы имеете в виду режим реального времени или «амортизированный» в реальном времени? (последнее является тем, что является достаточно отзывчивым, чтобы смотреть в реальном времени на человека, но не гарантирует, что иногда это может замедлить.Если мне нужна жесткая гарантия в реальном времени на что-то, это обычно связано с ограничениями задержки распространения, и не очень часто связаны с человеческими факторами.) –

+0

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

ответ

9

В самом деле, как часто говорится в FAQ, JFreeChart не поддерживает жесткое отображение в реальном времени, что означает, что график не обновляется при поступлении новых данных или в детерминированном интервале после него. Однако я обнаружил, что JFreeChart можно использовать для типов приложений, которые вы описываете. Вы можете добиться 1 обновления в секунду, и это нормально. Я не думаю, что человеческий глаз может следовать чему-то более быстрому, чем это.

Если вы хотите чего-то большего, я сомневаюсь, что вы найдете что-нибудь на Java (или даже на другом языке). Операционные системы, которые мы используем, не предназначены для реального времени. У вас не может быть гарантии, что они ответят в течение минимального интервала после события. Для обеспечения более 1-10 кадров в секунду потребуется жесткая интеграция с аппаратным драйвером.

Однако, если вы правильно разработали приложение, ОС будет реагировать быстро, и ваше приложение может легко отобразить график «в реальном времени» (это означает, что график обновляется один раз в секунду). Просто не используйте свое приложение для закрытия клапана в аварийной ситуации!

+3

Ну, мы здесь на какой-то границе. 1/s, конечно, рывком для глаза, если данные меняются намного быстрее. 10/s будет хорошо, но JFreeChart не может этого сделать. –

+0

Ну, если вы вычислите данные, вы можете сделать 10 f/s в Java. Однако я считаю, что нет никакого способа сделать это, если данные поступают с устройства сбора данных.В этом случае вам нужно будет напрямую связаться с драйвером; это было бы гораздо более сложной задачей. – kgiannakakis

+0

+1 Я использовал JFreeChart для графика цен на акции в реальном времени. –

5

взгляните на processing - это среда с открытым исходным кодом, основанная на Java, предназначенная для всех видов анимированных визуализаций.

+1

Вы уверены, что это не язык программирования, на который, возможно, влияет Java? http://en.wikipedia.org/wiki/Processing_(programming_language) –

+0

Вы правы. но: «[...] написано на Java. Программы, написанные в разделе Обработка, также переводятся на Java, а затем запускаются как программы Java. Программы, написанные на Java и Processing [...]» (из http: //www.processing .org/reference/compare/java.html), поэтому он будет интегрироваться с существующими java-моделями и библиотеками. – netzwerg

+0

В этом учебном пособии (http://www.processing.org/learning/tutorials/eclipse) объясняется, как интегрировать библиотеки обработки в существующий Java-проект - он ориентирован на eclipse, но концептуально это будет работать с любой другой Java-IDE. .. – netzwerg

1

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

4

Ну, если он должен быть Java, то вы можете захотеть взглянуть на них.

4

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

Как следует из названия, оно основано на SWT, в котором используется собственный рисунок ОС. Также он делает некоторые умные оптимизации для быстрого рисования, например, не рисовать все точки в наборе данных (см. Фрагмент примера большой серии).

5

Возможно, вы уже нашли хорошее решение, но если нет, я недавно проделал определенную работу над каркасом для создания 2D-диаграмм, позволяющих получать обновления в реальном времени со скоростью более 50 изменений в секунду.

Первоначальное намерение состояло в том, чтобы имитировать внешний вид устройства записи диаграммы в области прокрутки веб-страницы, но я считаю, что этот подход имеет более широкое применение.

Демонстрационную версию можно найти на странице Chart Recorder Demo, если кому-то интересно.

Внешний вид определяется шаблоном (www.journeylog.co.uk/chart/templates/chartRecorder.xml). Одна из возможностей - возможность указывать чертеж на сервере или в браузере с помощью ExplorerCanvas.

Если кому-то интересно, я мог бы начать с него проект с открытым исходным кодом.

+0

Да, я обнаружил, что JFreeChart был достаточно «в реальном времени» в м y случай. Во всяком случае, ваша демонстрация выглядит довольно впечатляюще! Open sourcing это определенно оценили бы :-) –

+0

Очень приятно. Я ищу график Java для Android, и ваше решение может быть адаптировано ... Hmmmm –

6

Просто наткнулся на описание того, как использовать visualvm charting library. Выглядит очень красиво!

+1

Да! Это в значительной степени то, что я изначально искал, хотя я обнаружил, что JFreeChart достаточно для моего дела. –

1

SWT XYGraph можно построить данные с помощью поставщика данных, так что вы можете создать поставщик данных в режиме реального времени, обеспечивающие данные в реальное время. С SWTChart и JFreeChart вам нужно подготовить весь массив для этого.

2

JCCkit отличается хорошей библиотекой, у которой меньше памяти, особенно во встроенной среде: https://sourceforge.net/projects/jcckit.

Принимает менее < 100 kb.

0

Этот вопрос был дан ответ хорошо: Java Real time graph plotting

Как VisualVM включает в себя КАРТОГРАФИРОВАНИЕ API, и этот API включен в JDK, у вас есть хорошее/быстрое картирование API доступно.

Смежные вопросы