2009-02-17 17 views
28

Es gab einen früheren Thread auf Java graph or chart library, wo JFreeChart wurde als ziemlich gut, aber, wie stated in its FAQ, es ist nicht für Echtzeit-Rendering bestimmt.Echtzeit-Java-Diagramm/Diagrammbibliothek?

Kann jemand eine vergleichbare Bibliothek empfehlen, die Echtzeit-Rendering unterstützt? Nur ein einfaches xy-Rendering - zum Beispiel, um ein Spannungssignal vom Datenerfassungssystem zu erhalten und es so zu zeichnen, wie es kommt (Zeit auf der x-Achse, Spannung auf der y-Achse).

+0

meinst du Echtzeit oder "Amortized" Echtzeit? (Letzteres ist etwas, das reaktionsschnell genug ist, um einem Menschen in Echtzeit zu begegnen, aber keine Garantie dafür, dass es gelegentlich langsamer wird. Wenn ich eine harte Echtzeitgarantie für etwas benötige, hängt es gewöhnlich mit Laufzeitverzögerungsgrenzen zusammen, und nicht sehr oft mit menschlichen Faktoren verbunden.) –

+0

Ich meine letzteres - es ist sicherlich genug, dass es in Echtzeit aussieht. Dies bedeutet wahrscheinlich etwa 10 Neuzeichnungen/Sekunde. –

Antwort

9

Was die FAQ eigentlich sagt, ist, dass JFreeChart keine Echtzeit-Charts unterstützt, was bedeutet, dass das Diagramm nicht aktualisiert wird, wenn neue Daten ankommen oder in einem deterministischen Intervall danach. Ich habe jedoch festgestellt, dass JFreeChart für die Art von Anwendungen verwendet werden kann, die Sie beschreiben. Sie können 1 Update pro Sekunde erreichen, was in Ordnung ist. Ich glaube nicht, dass ein menschliches Auge etwas schneller als das folgen kann.

Wenn Sie etwas mehr als das wollen, bezweifle ich, dass Sie etwas in Java (oder sogar in einer anderen Sprache) finden. Betriebssysteme, die wir verwenden, sind nicht auf Echtzeit ausgelegt. Sie können nicht garantieren, dass sie nach einem Ereignis in einem Mindestintervall antworten. Eine enge Integration mit dem Hardware-Treiber wird benötigt, um mehr als 1-10 Bilder pro Sekunde anzuzeigen.

Wenn Sie jedoch Ihre Anwendung richtig entwerfen, reagiert das Betriebssystem schnell und Ihre Anwendung kann problemlos ein "Echtzeit" -Diagramm (dh ein Diagramm, das sich einmal pro Sekunde aktualisiert) anzeigen. Verwenden Sie Ihre Anwendung nicht, um ein Ventil in einer Notfallsituation herunterzufahren!

+3

Nun, wir sind hier auf einer Art Grenze. 1/s ist sicherlich ruckelnd für das Auge, wenn sich die Daten viel schneller ändern. 10/s wäre in Ordnung, aber JFreeChart kann es wahrscheinlich nicht tun. –

+0

Nun, wenn Sie die Daten berechnen, dann könnten Sie 10 f/s in Java tun. Ich glaube jedoch, dass dies nicht möglich ist, wenn die Daten von einem Datenerfassungsgerät stammen.In diesem Fall müssten Sie direkt mit dem Fahrer kommunizieren. Dies wäre ein viel schwieriger zu lösendes Problem. – kgiannakakis

+0

+1 Ich habe JFreeChart für ein Echtzeit-Diagramm der Aktienkurse verwendet. –

5

werfen Sie einen Blick auf processing - es ist eine Open-Source, Java-basierte Umgebung für alle Arten von animierten Visualisierungen.

+1

Sind Sie sicher, dass es nicht selbst eine Programmiersprache ist, die vielleicht von Java beeinflusst wird? http://en.wikipedia.org/wiki/Processing_(programming_language) –

+0

Sie sind richtig. Aber: "[...] ist in Java geschrieben. Programme, die in Processing geschrieben sind, werden ebenfalls in Java übersetzt und dann als Java-Programme ausgeführt. Programme, die in Java geschrieben [...] sind und Processing [...]" (http: //www.processing .org/reference/compare/java.html), so dass es in bestehende Java-Modelle & libs integriert wird. – netzwerg

+0

Dieses Tutorial (http://www.processing.org/learning/tutorials/eclipse) erklärt, wie die Verarbeitungsbibliotheken in ein bestehendes Java-Projekt integriert werden - es konzentriert sich auf Eclipse, aber konzeptionell wird dies mit jeder anderen Java-IDE funktionieren. .. – netzwerg

1

Sie könnten um die Quelle für NetBeans graben. Der Profiler führt Echtzeitgraphiken verschiedener Dinge durch, wie z. B. Speichernutzung.

4

schnell genug für Echtzeit unterstützt, zumindest in meiner Erfahrung. Auch mit Chargen von Daten. Erschrecken Sie nicht vor der Versionsnummer, ja, es ist eine ziemlich neue API, aber ich benutze sie erfolgreich ohne Probleme.

Wie der Name andeutet, basiert es auf SWT, das native OS-Zeichnung verwendet. Es macht auch einige clevere Optimierungen für das Zeichnen schnell, wie nicht alle Punkte im Dataset zeichnen (siehe Large Series Beispiel Snippet).

5

Sie haben wahrscheinlich schon eine gute Lösung gefunden, aber wenn nicht, habe ich kürzlich an einem Framework gearbeitet, um 2D-Diagramme zu erstellen, die Live-Updates mit einer Rate von mehr als 50 Änderungen pro Sekunde ermöglichen.

Die ursprüngliche Absicht war, das Aussehen eines Diagrammschreibers in einer scrollenden Region einer Webseite nachzuahmen, aber ich glaube, dass der Ansatz breitere Anwendung hat.

Eine Demo kann bei Chart Recorder Demo gefunden werden, wenn jemand interessiert ist.

Das Aussehen wird durch eine Vorlage definiert (www.journeylog.co.uk/chart/templates/chartRecorder.xml). Eine Funktion ist die Möglichkeit, Zeichnungen mit ExplorerCanvas auf dem Server oder im Browser zu spezifizieren.

Wenn jemand interessiert ist, könnte ich ein Open-Source-Projekt dafür starten.

+0

Ja, ich fand heraus, dass JFreeChart "in Echtzeit genug" in m war y Fall. Wie auch immer, deine Demo sieht ziemlich beeindruckend aus! Open Sourcing würde es auf jeden Fall gefallen :-) –

+0

Sehr schön. Ich bin auf der Suche nach einem Java-Diagramm für Android und Ihre Lösung kann anpassungsfähig sein ... Hmmmm –

6

Gerade gestolpert über eine Beschreibung, wie man die visualvm charting library verwendet. Sieht sehr gut aus!

+1

Ja! Das ist ziemlich genau das, wonach ich ursprünglich suchte, obwohl ich fand, dass JFreeChart für meinen Fall ausreichend war. –

1

SWT XYGraph können Ihre eigenen Datenanbieter Plotdatensätze, so dass Sie eine Echtzeit-Datenanbieter Bereitstellung von Live-Daten erstellen können. Mit SWTChart und JFreeChart müssen Sie das gesamte Array dafür vorbereiten.

0

Diese Frage beantwortet wurde auch in: Java Real time graph plotting

Wie VisualVM einen Charting-API enthält, und dieses API ist im JDK enthalten ist, haben Sie einen guter/schnellen Charting-API zur Verfügung.