Visualisierung von Datensätzen

Status
Nicht offen für weitere Antworten.

benner

Aktives Mitglied
Ich habe keine Ahnung ob das Thema bei AWT&Co vielleicht besser aufgehoben wäre. Ich möchte Datensätze in ein Programm einlesen und anschließend graphisch veranschaulicht darstellen, z.B. Temperaturfelder o.Ä.
In diesem Fall bestehen die Datensätze aus einem Netz, dessen Knotentemperaturen tabellenartig gespeichert werden. In meinem ersten Programmentwurf habe ich für jeden Knoten ein Pixel der Temperetur entsprechend eingefärbt. Das hat auch funktioniert, auch wenn es gewisse Nachteile mit sich bringt (Auflösung mehr oder weniger vorgeschrieben, bei höherer Auflösung muss interpoliert werden, etc).
Das hat für 2dimensionale Datensätze ganz gut funktioniert. Eventuell kommen jetzt aber 3dimensionale Daten hinzu und dann würde das ganze wesentlich komplizierter werden.
Daher meine Frage: gibt es für solche Zwecke bereits vorgefertigte Bibliotheken, bzw. kann mir irgendjemand Links geben dir mir zu diesem Thema irgendwie weiterhelfen? Hab noch keine Literatur dazu gefunden, was ich bis jetzt gemacht hab hab ich mir sozusagen selbst überlegt...
Danke schonmal
 
W

Wayne0101

Gast
also zwecks literatur oder vorgefertigter bibliotheken zu diesem thema kann ich dir auch nicht weiterhelfen. ich würde an deiner stelle bezüglich der 3-dimensionalen daten mir die datenstruktur gut ansehen und versuchen eine geeignete darstellungsform zu überlegen bzw. zu suchen, ob diese nicht bereits von jemandem anders gefunden wurde, beispielsweise von microsoft in excel oder access oder du google's nach entsprechenden darstellungen via bildersuche.

zum thema aber, wie sich deine 2-dimensionale datenreihe auflösungsunabhängig dargestellen lässt, kann ich dir weiterhelfen. ich vermute, du hast dir eine Component gemacht und deren paint-methode überschrieben. darin zeichnest du deine daten ein, pixel für pixel. mein vorschlag wäre hier, daß du anstatt dessen dir ein BufferedImage erzeugst. abmessungen (höhe und breite) werden ja durch deine daten definiert (also wenn du werte zwischen 0°C und 50°C mit 0.1°C auflösung aus deiner datenbank erhältst, ergibt das schon mal 501 pixel in einer richtung). anstatt nun die werte direkt in die Component zu zeichnen, zeichne diese in das BufferedImage. ein Graphic-object erhältst du von diesem mittels getGraphics(). das so entstandene BufferedImage kannst du dann in deine Component in der überschriebenen paint-methode zeichnen lassen.

vorteil daraus ist, daß du dein bild beliebig skalieren kannst. java kann dir sogar das mit der interpolation übernehmen (via setRenderingHints(...) von Graphics2D). somit kannst du deine Component zu einer bildanzeige ausbauen, welche beispielweise einen zoomfaktor kennt und auch einen entsprechend großen rückgabewert aus getPreferredSize() zurückgibt. letzteres erfordert übrigends, daß du nach dem verändern des zoomfaktors vom parent deiner component die methode doLayout() aufrufst, also beispielsweise von dem JScrollPane in dem sie steckt (eigentlich reicht vom JViewport des JScrollPane). dadurch wird deine Component auflösungs- und datenunabhängig (du kannst beispielsweise eine mindestgröße definieren. ausserdem kannst du auf das BufferedImage zurückgreifen, wenn du die werte für getPreferredSize() benötigst, anstatt erst mal wieder deine eingelesenen daten durchzurattern).

diese gesammtlösung offeriert dir auch die möglichkeit, daß du deine daten halbtransparent darstellst. so könntest du also mehrere dinge gleichzeitig sichtbar machen. auch bietet dir diese möglichkeit an, daß du mehrere bilder übereinander legst und dem user anbietest durch die bilder hindurch zu blättern. das wäre beispielsweise eine möglichkeit deine 3-dimensionale datenstruktur darzustellen ... aber wie gesagt, ohne näheres über die beschaffenheit der daten zu wissen, kann ich dir bei deinem problem mit der 3-dimensionalen datenstruktur auch nicht weiterhelfen. ich mein, bis jetzt weiß ich ja nicht mehr über deine datenstruktur, als das eine der beschriebenen achsen eine temperatur darstellt.

ich hoffe, ich konnte dir ein wenig helfen

viele grüße

wayne
 

benner

Aktives Mitglied
OK danke das hilft mir erstmal ein ganzes Stück weiter. Habe zwar erstmal ein anderes Problem zu bearbeiten, aber werde sicher auf deine Ideen zurückkommen. Vielen Dank =)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben