php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.09.2006, 23:31  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard Graphen erstellen - Achseneinteilung

Hallo,

ich möchte mit PHP+GD einen Graphen zeichnen.

Das Gedöns mit dem Malen der Linien etc. sollte kein Problem sein.

Wo ich aber noch am Knobeln bin ist, wie man die Achsen geschickt einteilt bzw. beschriftet.

Ich habe auf der horizontalen Achse Zeiten bestehend aus Datum und Uhrzeit. Da will ich einfach den ersten und letzten Tag noch voll dazu nehmen und alles gleichmäßig in Tage einteilen. Wenn es pro Tag zu eng wird, wird eben nur jeder zweite oder dritte Tag angeschrieben, während für jeden Tag eine Hilfslinie gezeichnet werden soll.

Schwieriger ist es, eine Einteilung für die vertikale Achse zu finden. Da sind Zahlenwerte einzutragen.

Ich kann natürlich den niedrigsten und größten einzutragenden Wert ermitteln, aber wenn ich die ans obere und untere Ende setze, sieht das evtl. fürchterlich aus.
Ich suche daher ein Verfahren, eine ästhetische Achseinteilung zu erreichen.

Also:
- oben und unten noch etwas Platz,
- Hilsflinien bei Vielfachen von 1, 2 oder 5, evtl. noch um Zehnerpotenzen erweitert.

In den Tutorials, die ich bisher gefunden habe, wird zwar munter gezeichnet, aber die Achseinteilung wurde da immer vernachlässigt.

Kann mir jemand einen Link zu einem passenden Tutorial geben?
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.09.2006, 07:31  
CIX88
Gast
 
Beiträge: n/a
Standard

Ich hatte damit mal angefangen, kannst es gern versuchen zu vervollständigen:
http://www.cix88.de/cix_php/php_diag...zugriffe_1.php

Gleiches Prinzip, nur andere Achse:
http://www.cix88.de/cix_php/php_diag...m_balken_1.php
 
Alt 09.09.2006, 10:36  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

So, jetzt konnte ich mich endlich mal wieder damit befassen.

Erstmal danke für die Links. Soweit ich das gesehen habe, machen die Scripts aber genau das, was ich suche nicht. Nämlich die Achseinteilung etwas verschönern.

Dein erstes Script gibt zudem noch falsche Achsen auch. Der Maximalwert steht ganz oben an der y-Achse, der zugehörige Punkte ist aber viel tiefer. Achse und Graph scheinen unterschiedlich skaliert zu sein.

Ich hab jetzt mal einen straight-forward-Versuch unternommen und der liefert eigentlich ganz hübsche Ergebnisse:

Auf der X-Achse (da sind Werte aus einer DATETIME-Spalte) suche ich Minimum und Maximum aus der Tabelle. Dann schneide ich die Uhrzeit ab und ersetze sie durch 0:00:00 am Anfang und 23:59:59 am Ende.

Für die y-Achse (da sind ganzzahlige numerische Werte enthalten) habe ich nun diesen recht simplem Algorithmus gebastelt:

PHP-Code:
<?php
// $Min und $Max enthalten die Unter- und Obergrenze des vorhandenen 
// Wertebereichs, der im Graphen dargestellt werden soll.

   
$Diff $Max-$Min;
   
$Diff /= 4;   // mind 4 Teile abtrennen, wird nachher größer

// Stellen abspalten, bis Ergebnis zwischen 1...10
// Funktioniert nicht, falls $Diff < 1
   
$Scale 1;
   while (
$Diff 10)
   {
      
$Diff /= 10;
      
$Scale *= 10;
   }
// Nun enthält $Scale den Faktor, der abgespalten wurde (1, 10, 100, ...)
      
// Einteilung soll Vielfaches von 1, 2 oder 5 sein.
   
if ($Diff 5)
      
$Scale *= 5;
   elseif (
$Diff 2)
      
$Scale *= 2;
// Scale kann nun 1, 2, 5, 10, 20, 50, 100, 200, 500, ... sein.
// Dies könnte schon als Achseinteilung verwendet werden.

// Damit wir am oberen und unteren Ende der Achse auch einen gleich großen
// Abschnitt haben wird noch gerundet...
   
$Min intval($Min $Scale);
   
$Min *= $Scale;
// Die Untergrenze wurde damit auf Vielfache von $Scale abgerundet.

   
$MaxNew intval(0.9 $Max $Scale);
   
$MaxNew *= $Scale;
// $MaxNew enthält den abgerundeten Wert von $Max.
// Damit ist $Max aber evtl. nicht mehr enthalten.

// Wenn $Max nicht zufällig schon ein Vielfaches war,
// dann $MaxNew noch um eine Einteilung erhöhen.
   
if ($MaxNew $Max)
      
$MaxNew += $Scale;
   
$Max $MaxNew;
// Nun enthält $Max den aufgerundeten Wert.

// Achsmalerei und -beschriftung nach Belieben ;-)
?>
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] MySQL Datenbank erstellen, nur wie? Datenbanken 9 24.04.2012 15:04
[Erledigt] Instanz einer Klasse mit unbekanntem Namen erstellen PHP Tipps 2005 4 06.02.2009 14:39
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Info Seite erstellen Galrian PHP Tipps 2008 1 18.01.2008 15:17
Anker erstellen fachinformatiker HTML, Usability und Barrierefreiheit 5 17.05.2006 10:18
Gästebuch auf PHP Basis erstellen - verzweifel ... sanctus PHP Tipps 2006 3 23.04.2006 15:33
darf keine Datenbank erstellen in phpMyAdmin Datenbanken 2 20.10.2005 19:32
Dateien erstellen und chmod setzen auch wenns nicht geht ^^ PHP Tipps 2005 8 22.05.2005 02:53
Stammbaum erstellen Riot PHP Tipps 2005 17 13.05.2005 16:32
Ordner erstellen und Datei uploaden Juuro PHP Tipps 2005 6 20.01.2005 21:18
Dateien erstellen oder schreiben funktioniert nicht im Web PHP Tipps 2004-2 1 05.12.2004 19:39
[Erledigt] Variablen Namen erstellen lassen??? PHP Tipps 2004 4 05.11.2004 14:37
elektr. Fragebögen erstellen Beitragsarchiv 4 27.10.2004 12:57
script zum erstellen eines txt-dokumentes PHP Tipps 2004 4 11.07.2004 18:56
Ordner per Skript erstellen --> Rechte Problem PHP Tipps 2004 2 06.07.2004 14:19

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
achseneinteilung, php max scale graph, phplot y-achse, achseneinteilung algorithmus, graph einteilung, phplot skalierung, phplot y-achse werte, y-achse einteilen, http://www.php.de/php-tipps-2006/41953-graphen-erstellen-achseneinteilung.html, php graphen malen, algorithmus achsenskalierung, graphen einteilung, php graph erstellen, graphen achsbeschriftung algorithmus, algorithmus graphen skalieren, phplot hilfslinien, php gd graph achsenbeschriftung, einteilung achsen, php einteilung y achse, phplot x achse zeit

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:41 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.