Statistik als Diagramm?

Hallo @Mew

naja das ist ja eigentlich ganz einfach.

Nehmen wir mal an die maximale Länge der Balken soll 100 px sein.

Nun schauen wir in der DB alle Einträge an und finden heraus, dass der Größte Wert 50 ist.

Naja, jetzt kommt logik und Mathematik ins Spiel ;)

Mit der Formel: Maximale Länge/Größter Wert bekommen wir ein Einheitsmaß.
In unserem Beispiel wäre das: 100 / 50 = 2.

Nun wissen wir wie viele Pixel eins dieser Eintragseinheiten hat.

Und nun können wir jeweils den Wert, den wir haben mit den Einträgen multiplizieren.

30 * 2 = 60 px
40 * 2 = 80 px
...


Wir stellen wir nun das ganze dar ?
Naja wenn wir wissen wie viel Pixel dieser gesamte Balken hat (haben wir zwei Zeilen weiter oben ausgerechnet) müssen wir nur noch den Balken darstellen.
Das können wir mit einem div, einem Bild, ... machen :)

Willst du allerdings eine etwas komplexere Statistik haben, dann musst du dir wohl im Manual die Grafikfunktionen ansehen, wobei du aber dort auch oben beschriebenes Prinzip brauchst.



Grüße Simon
 
Wenn du die Zahlen der Auswerung hast dann kanste mittel gd Bilobiteck die Balken darstellen lassen. Im Tuorials bereich sind dazu einige Beispiele.

Mfg Splasch
 
Glaubs was die Gd macht? Die erstellt Bilder und ja es ist einfach. Dazu brauchste nichtmal die Pixelanzahl berechnen allen der Prozentsatz reicht aus um es nacher als Balken Grafik darstellen zu lassen.

Wie lang und hoch der balken bei 100% sein soll kann man sich im grunde ausuchen.
Die Rechteck option hilft da schon weiter.;)

Dann will ich mal nicht so sein Hier mal meine Klasse zur Balken erstellung.
Bei der werden die Prozentzahl auch gleich mit in den Balken reingeschrieben
PHP:
<?php

class Balken {
	
private $Anz='0';
private $Hintergrundfarbe="117, 117, 117";
private $Vfarbe_r="0";
private $Vfarbe_g="0";
private $Vfarbe_b="255";

private $Text_farbe="255, 255, 255";

public function Balken($Anz){
	$this->Anz=$Anz;
	}
public function Farbe($Farbe){
	
	$Farbe=explode(",",$Farbe);
	$this->Vfarbe_r=$Farbe[0]; // R
	$this->Vfarbe_g=$Farbe[1]; // G
	$this->Vfarbe_b=$Farbe[2]; // B
	
	}

public function Erzeuge(){
	$Text_farbe="255";
	ob_start();
	header ("Content-type: image/png");
	$im = @ImageCreate (102, 13)  // Bild erstellen in Pixel grösse Breite/Höhe
      or die ("Kann keinen neuen GD-Bild-Stream erzeugen");
    $Hintergrundfarbe = ImageColorAllocate ($im, 117, 117, 117); // setzt gesamtes Bild auf die Farbe R,G,B
	$Vordergrundfarbe = ImageColorAllocate ($im, $this->Vfarbe_r, $this->Vfarbe_g, $this->Vfarbe_b); // setzt gesamtes Bild auf die Farbe R,G,B  
	$Text_farbe = ImageColorAllocate ($im,255, 255, 255); //Schriftfarbe
	imagefilledrectangle($im, 1, 1, $this->Anz, 11, $Vordergrundfarbe); // (Startposition) x horenzental,y (größe)x,y,Füllfarbe (Erzeugt Rechteck)
	ImageString ($im, 2, 45, -1, $this->Anz."%", $Text_farbe); // Schriftgrösse,x,y,text,farbe
	
	ImagePNG ($im); // Direkte Ausgabe
	ImageDestroy($im); // Speicher wieder freigeben
	ob_end_flush();
	}
	
	
}// Klassen ende

Aufrufen tut man das ganze dann so in etwa
PHP:
if ($Farbe=="V") $Farbe="128,64,0";

$Bild= new Balken(100); // Wert für die Prozentzahl angeben
$Bild->Farbe($Farbe); // Vordergrundfarbe setzen
$Bild->Erzeuge();// Ausgabe

Und die Bild ausgabe kanste dann ganz normal über Html machen.
Bsp. <img src="Balken.php?F=V">


Mfg Splasch
 
Zuletzt bearbeitet:
Hallo!

@Splasch, natürlich kann man es auch mit der GD machen, aber sinnvoll ist es nicht.
Wenn es z.B. 3D Balken werden sollen, dann sind fertige Grafiken wesentlich einfacher.
Ausserdem müssten durch die GD generierte Balken bei jedem Seitenaufruf neu generiert werden, da ja auch die Besucherzahl vom aktuellen Tag angezeigt wird und sich somit noch ändert.
Dadurch hätte man den Nachteil dass zum einen der Server unnötig belastet wird, und zum anderen wird unnötiger Trafic verursacht.
Eine statische Grafik, die einfach nur entsprechend gestreckt wird, braucht auch nur einmal übertragen werden.
Und genau diesen Weg geht o.g. Seite auch.

Gruss Dr Dau
 
Ausserdem müssten durch die GD generierte Balken bei jedem Seitenaufruf neu generiert werden, da ja auch die Besucherzahl vom aktuellen Tag angezeigt wird und sich somit noch ändert.
Dadurch hätte man den Nachteil dass zum einen der Server unnötig belastet wird, und zum anderen wird unnötiger Trafic verursacht.

Da muß ich dir Wiedersprechen man kann genau so Bild-Datein erzeugen und diese dann Anzeigen lassen.Somit ist es nicht nötig jedes mal den Balken zu erzeugen.Soviel zum angeblichen Nachteil.

Das mit den Strecken der Bilder ist ein Pfuschlösung und geht nur in bestimmten Rahmen gut.

3D Balkengrafik kanste genauso mit einer Gd erstellen. Auch wenn es für den Anfang aufwendiger erscheint wird es sich später lohnen.Ist sowie bei der OO die ist auch aufwendiger aber lohnt sich später eben.

Bsp zur datei erzeugung:
ImagePNG($im, Dateiname.png');

Nähere infos darüber unter:
http://at2.php.net/manual/de/function.imagepng.php

Mfg Splasch
 
Zuletzt bearbeitet:
Da muß ich dir wiedersprechen man kann genau so Bild-Datein erzeugen und diese dann anzeigen lassen.Somit ist es nicht nötig jedes mal den Balken zu erzeugen.Soviel zum angeblichen Nachteil.
Natürlich kann man die Bilder auch zwischenspeichern. Das ist dann aber auch nur ein typischer Kompromiss zwischen Berechnungszeit und benötigtem Speicher (in diesem Fall Speicher auf der Festplatte). Man gewinnt also Zeit, braucht aber dafür mehr Speicherplatz. Abgesehen davon: um das (wenn auch nur einmalige) Generieren der Bilder kommt man nicht drumrum. Von der nötigen Übertragung jedes einzelnen Bildes ganz zu schweigen.

Das mit den strecken der Bilder ist ein pfusch lösung […]
Gut, dass man verschiedener Meinung sein darf. Ich fände deine Variante jedenfalls weniger vorteilhaft (Pfusch wollte ich jetzt aus Höflichkeit nicht schreiben).

Grüße,
Matthias
 
Natürlich kann man die Bilder auch zwischenspeichern. Das ist dann aber auch nur ein typischer Kompromiss zwischen Berechnungszeit und benötigtem Speicher (in diesem Fall Speicher auf der Festplatte). Man gewinnt also Zeit, braucht aber dafür mehr Speicherplatz. Abgesehen davon: um das (wenn auch nur einmalige) Generieren der Bilder kommt man nicht drumrum.

Ob du nun die Bilder vorher per Ftp hochläds oder Dynamisch erzeugst wird nix am verbrauchten Speicher ändern.(in dem fall wird der Speicherplatzverbrauch gleich groß sein).
Das einmal eine kurze Berechnung Zeit in Anspruch genohmen wird kann man den Server doch zumuten.Schließlich braucht der Client auch beim strecken Rechenleistung und das jedes mal. Wobei beim Dynamisch erzeugten Bild nur 1 mal die Brechnung statt findet.

Von der nötigen Übertragung jedes einzelnen Bildes ganz zu schweigen.

Wer sagt dann das man leuter einzelbilder machen muß? Man kann das genauso in 1 Bild zusammenfassen.

Mfg Splasch
 
Zuletzt bearbeitet:
Zurück