Diagramme erstellen per Bild

Dark Ranger

Erfahrenes Mitglied
Guten Morgen

Da ich hier nicht die Möglichkeit habe, irgendetwas herunterzuladen, kann ich auch nichts herunterladen was mir beim erstellen von einem Diagramm helfen würde.

Ich will ein Diagramm machen und habe da ein paar Daten. Diese Daten stellen zugriffe dar.
Im moment bastele ich mir ein Bild und auf diesem Bild stellen 4 Pixel 5 Minuten dar. Und dann schaue ich mir halt die Werte an und färbe die entsprechenden Pixel dann ein, sodass ich später ein Säulendiagramm habe.

Nun ist es aber ziemlich umständlich, da ich ja alles immer anpassen muss und im moment viele for-Schleifen habe.
Ich habe mir überlegt, dass es vielleicht einfacher wäre, da eine eigene Klasse zu haben, der ich eine Map<String, Integer> übergebe und die dann das ganze Diagramm erstellt.

Allerdings weiß ich nicht wie ich das am besten anstellen soll? Am besten wäre ja auch ein richtiges Koordinatensystem, welches bei (0,0) anfängt und dann y nach oben hin größer wird und nicht nach unten. Den Ursprungspunkt zu verschieben, da habe ich glaube ich schonmal etwas drüber gelesen.

Code:
//Grafik einrichten
GraphicsConfiguration gfxConf = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
			BufferedImage image = gfxConf.createCompatibleImage( (293*4)+10, 150*4);
//x-Achse zeichnen
			image.createGraphics().fillRect( 0, image.getHeight()-5*4, image.getWidth(), 5 );
//y-Achse zeichnen
			image.createGraphics().fillRect( 5*4+5, 0, 5, image.getHeight() );
//y-Achsen Beschriftung und Zwischenbalken
			int ytext=5;
			for(int i=30;i<image.getWidth();i++) {
				int j=i-30;
				if((j%4)==0 && j!=0) {
					Color cache = Color.BLACK.brighter();
					for(int q=0;q<=5;q++) {
						cache = cache.brighter();
					}
					int brighter = cache.getRGB();
					for(int y=1;y<image.getHeight()-20;y++) {
						image.setRGB(i, y, brighter);
					}
				}
			}
			for(int y=image.getHeight()-40;y>0;y-=5*4) {
				image.createGraphics().drawString(to3(ytext), 1, y+4);
				for (int x=30;x<image.getWidth();x++) {
					image.setRGB(x, y, grgb);
					image.setRGB(x, y-1, grgb);
					image.setRGB(x, y-2, grgb);
					image.setRGB(x, y-3, grgb);
				}
				ytext+=5;
			}
//x-Achse und Zwischenbalken
int count=30;
			int time=1;
			for(int i=30;i<image.getWidth();i++) {
				int j=i-30;
				if((j%4)==0 && j!=0) {
					if((j%48)==0 && j!=0) {
for(int y=1;y<image.getHeight()-20;y++) {
							image.setRGB(i, y, lgrgb);
						}
image.createGraphics().drawString(to2(time), i-6, image.getHeight()-1);
						time++;
					}
}
			}   usw.
Mit diesem Code erzeuge ich alleine nur sozusagen den Hintergrund für das Diagramm
 
Zuletzt bearbeitet:
So etwas?

Frage: Möchtest du die Klasse selbersreiben oder eine vorhandene verwenden.
 
Zuletzt bearbeitet:
Ich kann die Klasse auch selber schreiben, habe auch schon ein bisschen damit angefangen.
Allerdings ist das nicht sehr gut wie ich denke und es ist eigentlich fast der gleiche Code wie der den ich gepostet habe, aber ich denke da gibt es weit bessere Lösungen, mir fehlt nur bisschen der Ansatz
 
Hi,

Wenn es um eine einzige Säule geht, nimm doch einen JProgressbar. Den kannst du vertikal und Horizontal legen und auch einfärben usw...

Ansonsten ist dies leicht mit Java2D möglich.

Wie gut kennst du dich denn in Java aus?
 
Vielleicht hilf JFreeChart weiter? Damit kann man recht einfach komplexe Diagramme aus Datenbeständen rendern.

Gruß
Ollie
 
Aber das müsste ich doch runterladen oder nicht? Und das ist nunmal nicht möglich!

Brauche ich für die JProgressbar nicht eine Oberfläche?
Naja wie gut kenne ich mich in JAVA aus? Ich habe schon einiges programmiert, aber bin sicher kein Meister.

Das ganze soll sich nachher in eine HTML Seite einfügen lassen. Da habe ich auch schon etwas und das habe ich auch schon erfolgreich angepasst, um die Daten die ich nutze in eine HTML Seite zu schreiben. Diese Daten will ich jetzt nur noch Grafisch ein wenig aufwerten.
 
Zuletzt bearbeitet:
Wie genau sind den die Anforderrungen:
- Wie viele Säulen brauchst du, oder sind die Variabel
- Ist die Ausrichtung variabel
- Ist das Diagramm starr

....
 
Brauche ich für die JProgressbar nicht eine Oberfläche?

Das ganze soll sich nachher in eine HTML Seite einfügen lassen. Da habe ich auch schon etwas und das habe ich auch schon erfolgreich angepasst, um die Daten die ich nutze in eine HTML Seite zu schreiben. Diese Daten will ich jetzt nur noch Grafisch ein wenig aufwerten.

Das wäre schon im ersten Beitrag wichtig gewesen...

Du kannst doch ein Bild erstellen, dies dann in einem gängigen Format speichern und, obwohl ich mich mit HTML net auskenne, dann müsstest du es auf der Seite einbinden können oder?!
 
Also die x-Achse ist die Zeit.

Um eine angemessene Größe zu erhalten arbeite ich dort so, dass 4 Pixel 5 Minuten entsprechen und so ist das Diagramm dann auch auf der x-Achse von 0 Uhr bis 0 Uhr eingeteilt.
Also sind da die anzahl der Säulen festgelegt.
12 pro Stunde * 24 Stunden dürften 288 Säulen sein.

Die Höhe ist allerdings variabel, je nachdem welche Werte ich habe, so kann es auch mal vorkommen dass meine Säulen nicht da sind, da auch 0 Werte erlaubt sind.

Also die Bilderstellung habe ich auch schon einigermaßen hinbekommen, aber das ganze habe ich in der Funktion gemacht und es waren eine Menge Zeilen Quellcode und sehr unübersichtlich, deswegen wollte ich mir ne Klasse schreiben, der ich nur noch die Daten übergeben muss.
 

Neue Beiträge

Zurück