2009-02-17 32 views
28

Hubo un hilo anterior en Java graph or chart library, donde se encontró que JFreeChart era bastante bueno, pero, como stated in its FAQ, no está diseñado para la representación en tiempo real.¿Gráfico de gráficos/gráficos de Java en tiempo real?

¿Alguien puede recomendar una biblioteca comparable que admita la representación en tiempo real? Solo algunas representaciones básicas de xy, por ejemplo, obtener una señal de voltaje del sistema de adquisición de datos y trazarlo como viene (tiempo en el eje x, voltaje en el eje y).

+0

¿te refieres en tiempo real o "amortizado" en tiempo real? (Este último es algo que es lo suficientemente sensible como para mirar en tiempo real a un ser humano, pero no hay garantías de que en ocasiones puede disminuir la velocidad. Si necesito una garantía dura en tiempo real sobre algo, generalmente está relacionado con los límites de retardo de propagación, y no muy a menudo relacionado con factores humanos.) –

+0

Me refiero a lo último: sin duda es suficiente con que se vea en tiempo real. Esto probablemente significa algo así como 10 redibujos/segundo. –

Respuesta

9

Lo que dice realmente la pregunta frecuente es que JFreeChart no es compatible con gráficos rígidos en tiempo real, lo que significa que el gráfico no se actualiza cuando llegan nuevos datos o en un intervalo determinístico posterior. Sin embargo, he encontrado que JFreeChart se puede utilizar para el tipo de aplicaciones que está describiendo. Puedes lograr 1 actualización por segundo, lo cual está bien. No creo que un ojo humano pueda seguir algo más rápido que esto.

Si quiere algo más que esto, dudo que encuentre nada en Java (o incluso en otro idioma). Los sistemas operativos que utilizamos no están diseñados para ser en tiempo real. No puede tener una garantía de que responderán en un intervalo mínimo después de un evento. Se necesitará una estrecha integración con el controlador de hardware para mostrar más de 1 a 10 fotogramas por segundo.

Sin embargo, si diseña su aplicación correctamente, el sistema operativo responderá rápidamente y su aplicación puede mostrar fácilmente un gráfico en "tiempo real" (es decir, un gráfico que se actualiza una vez por segundo). ¡Simplemente no use su aplicación para apagar una válvula en una situación de emergencia!

+3

Bueno, estamos en una especie de límite aquí. 1/s es ciertamente desigual a simple vista si los datos cambian mucho más rápido. 10/s estaría bien, pero JFreeChart probablemente no puede hacerlo. –

+0

Bueno, si calcula los datos, puede hacer 10 f/s en Java. Sin embargo, creo que no hay forma de hacerlo si los datos provienen de un dispositivo de adquisición de datos.En ese caso, necesitaría comunicarse directamente con el conductor; este sería un problema mucho más difícil de resolver. – kgiannakakis

+0

+1 He usado JFreeChart para obtener un gráfico de precios de acciones en tiempo real. –

5

eche un vistazo a processing - es un entorno abierto, basado en Java, diseñado para todo tipo de visualizaciones animadas.

+1

¿Estás seguro de que no es en sí mismo un lenguaje de programación, que quizás esté influenciado por Java? http://en.wikipedia.org/wiki/Processing_(programming_language) –

+0

estás en lo correcto. pero: "[...] está escrito en Java. Los programas escritos en Processing también se traducen a Java y luego se ejecutan como programas Java. Programas escritos en Java y Processing [...]" (de http: //www.processing .org/reference/compare/java.html) por lo que se integrará con los modelos y libs de java existentes. – netzwerg

+0

este tutorial (http://www.processing.org/learning/tutorials/eclipse) explica cómo integrar las bibliotecas de procesamiento en un proyecto java existente: está enfocado en eclipse, pero conceptualmente esto funcionará con cualquier otro IDE de Java. .. – netzwerg

1

Puede buscar en la fuente de NetBeans. El generador de perfiles hace gráficos en tiempo real de varias cosas, como el uso de la memoria.

4

lo suficientemente rápido para el tiempo real es swtchart, Al menos en mi experiencia. Incluso con lotes de datos. No se asuste con el número de versión, sí, es una API bastante nueva, pero la utilizo con éxito sin problemas.

Como su nombre lo indica, se basa en SWT, que usa el dibujo del sistema operativo nativo. También realiza algunas optimizaciones inteligentes para dibujar rápido, como no dibujar todos los puntos en el conjunto de datos (ver Fragmento de ejemplo de serie grande).

5

Probablemente ya ha encontrado una buena solución, pero si no, recientemente he trabajado en un marco para producir gráficos en 2D, permitiendo actualizaciones en vivo a una velocidad de más de 50 cambios por segundo.

La intención original era imitar la apariencia de un grabador de gráficos en una región desplazable de una página web, pero creo que el enfoque tiene una aplicación más amplia.

Una demostración se puede encontrar en Chart Recorder Demo si alguien está interesado.

La apariencia está definida por una plantilla (www.journeylog.co.uk/chart/templates/chartRecorder.xml). Una característica es la capacidad de especificar el dibujo en el servidor o en el navegador usando ExplorerCanvas.

Si alguien está interesado, podría iniciar un proyecto de código abierto para él.

+0

Sí, yo encontró que JFreeChart era "en tiempo real suficiente" en m y caso De todos modos, ¡tu demo parece bastante impresionante! Open sourcing definitivamente sería apreciado :-) –

+0

Muy agradable. Estoy buscando un gráfico de Java para Android y su solución puede ser adaptable ... Hmmmm –

6

Acabo de tropezar con una descripción sobre cómo usar el visualvm charting library. Se ve muy bien!

+1

¡Sí! Esto es exactamente lo que estaba buscando originalmente, aunque descubrí que JFreeChart era suficiente para mi caso. –

1

SWT XYGraph pueden trazar datos con su propio proveedor de datos, para que pueda crear un proveedor de datos en tiempo real que proporciona datos en tiempo real. Con SWTChart y JFreeChart, tienes que preparar toda la matriz para ello.

0

Esta pregunta ha sido respondida bien en: Java Real time graph plotting

Como VisualVM incluye una API de gráficos, y esta API está incluido en el JDK, que tiene una buena API/cartografía rápida disponible.