cybton.com
Über uns | Jobs | Werbung | Sitemap | AGB | Impressum | Hilfe ?
 Kostenlos anmelden)
wichtigFortschritt der Entwicklung
Forum
Aktuellste Beiträge
Forenregeln

Community
BB-Codes
Tags
Chat
Suche (Web)
Wer ist online?
Top-User

Basar


Statistik
Mitglieder gesamt: 68698
Mitglieder online: 0
Gäste online: 1
mehr...

Anzeige
Forum » Forum: Website & Webprogrammierung » Thread: chart pie diagramm class

Thread: chart pie diagramm class

Seite 3 von 41234

11.06.2009 19:43 Uhr

 

Status: offline
  • Du solltest noch mit einem Interface sicherstellen, dass die unterschiedlichen Renderer die render()-Methode besitzen
  • Die Legenden-Generierung könnte man noch irgendwo zusammenfassen
  • Man könnte mit den einzelnen Renderern image-Resourcen erzeugen, die dann erst im Chart zusammengebaut werden: Positionierung der Legende, generiertes Chart soweit skalieren, dass es neben die Legende passt; Dadurch hätte dann auch das erzeugte Bild die korrekte Größe
___________________________
C++ ist ein Esel mit Ledersitzen und elektrischen Fensterhebern, Java ist auch eine Insel und Python ist eine Schlange...
12.06.2009 18:26 Uhr

 

Status: offline
Hat jemand den Fehler gefunden, warum Zahlen unter 1 % nicht angezeigt werden?
___________________________
MFG Jan
"funzt nicht" ist keine gültige Fehlerbeschreibung!*haarerauf*
http://www.sysprofile.de/id30821
12.06.2009 19:01 Uhr

 

Status: offline
Zitat:
Und kann das wer in SVG Grafiken erstellen?

Vielleicht wäre es hier sinnvoll mit allen Renderern SVG-Grafiken zu generieren und die bei Bedarf in Bilder, ImageMaps etc zu transformieren. Ist jedenfalls wohl weniger Arbeit als für jeden Ausgabetyp und jeden Diagrammtyp einen neuen Renderer zu schreiben.

Zitat:
Hat jemand den Fehler gefunden, warum Zahlen unter 1 % nicht angezeigt werden?

Was meinst du mit "nicht angezeigt"? Taucht der komplette Wert nicht in dem Diagramm auf? Oder fehlt nur der Balken? Letzteres könnte vielleicht an einer ungünstigen Bildgröße liegen, 1% = 1 Pixel wäre. Dann wären natürlich kleinere Werte <1Pixel und würden deshalb nicht dargestellt. Man müsste also dafür den berechneten Wert aufrunden (oder so)
___________________________
C++ ist ein Esel mit Ledersitzen und elektrischen Fensterhebern, Java ist auch eine Insel und Python ist eine Schlange...
12.06.2009 20:30 Uhr

 

Status: offline
Zitat:
Was meinst du mit "nicht angezeigt"

Es taucht nicht auf.
1,2 % werden noch deutlich dargestellt, aber 0,9 ist einfach nicht da, auch wenn ich die Bild-höhe verdoppele  :question: 
___________________________
MFG Jan
"funzt nicht" ist keine gültige Fehlerbeschreibung!*haarerauf*
http://www.sysprofile.de/id30821
12.06.2009 22:00 Uhr

 

Xaron
Programmierer
Status: offline
Ich hab mir nun deinen jetztigen Code angesehen und habe einige Verbesserungsvorschläge. Ich hoffe sie sind dir willkommen und du wirst diese umsetzten, denn ich glaube, dass sie sehr sinnvoll sind.
Und verstehe das bitte nicht als Kritik, sondern nimm meine Tipps an und lerne daraus. Man denkt schnell, dass man OOP programmieren kann, aber es gibt da doch mehr zu lernen als man glaubt. Und das gelerne dann richtig einzusetzten stellt auch eine Herausforderung da. Meine Verbesserungsvorschläge basieren hauptsächlich auf OOP.

Chart.php
  • "scheme" direkt als Array speichern und nicht als String und dann explode() verwenden.
  • In Konstruktoren NIE "return" verwenden, da der Wert von return nicht zurückgegeben wird. Meiner Meinung nach, sollte das beim Phasen einen Error geben. Da waren die php-Entwickler schlampig. Falls man tatsächlich im Konstruktor ein Fehler passieren kann, dann muss man mit Exceptions arbeiten. Aber so etwas sollte man vermeiden.
  • "addSeries()" was ist das? Sollte man aus dem Kommentar herauslesen können. So, beim weiteren Code durchschauen wurde es dann klar. Wenn man auf Preformance optimieren möchte, dann könnte man direkt ein Array übergeben und auf DataSeries verzichten. Falls es "sicher" sein soll, dann schreib "addSeries( DataSeries $serie )". Dann übergibst du das ganze DataSeries Objekt und holst dir erst in der Methode das Array raus.
  • "render()" falls du schon ein return false machst, dann solltest du auch ein return true machen.


*ChartRenderer.php
  • "label_form" mach ein Interface "LableForm" und 2 Klassen (LableFormRound, LableFormSquare) die jenes implementieren. Und dann gibst du ihnen einfach eine Methode "render()". Dann brauchst du keinen langsamen String Vergleich und es ist leichter erweiterbar. Man muss nur einen neuen LableForm Klasse schreiben und nichts am bestehenden Code ändern.
  • Eine abstract Superklasse "ChartRenderer" einführen. Denn soweit ich sehe unterscheiden sich die Klassen nur an einer Stelle um 15-30 Codezeilen. In die abstract Superclass enthält den identischen Code von den momentanen Renderern. Zusätzlich machst du eine abstract Method z.B. "renderImageForm()" (der Name ist nicht sondlerlich gut, aber mir ist auf die schnelle nichts anderes eingefallen) und rufst diese anstelle der 15-30 unterschiedlichen Codezeilen auf. In den Basisklassen (PieChartRender, BarCharRenderer) definierst du dann die abstract method.
  • "render()" bitte versuche diese Methode in mehrere Methoden aufzuspalten. Denn so wie sie ist, kenne ich mich absolut nicht aus und könnte (ohne Einarbeitungszeit) keine schnellen Änderungen durchführen. Wie ich aufspalten meine: "render(){ doWork1(); doWork2(); doWordk3(); }". Denn durch sowas wird der Code viel besser lesbar und damit auch leichter Änder- und Erweiterbar



EDIT: falls es Fragen zu einem der Punkte gibt, dann einfach stellen. Ich werde dann versuchen diese zu beantworten. Vor allem Fragen wie: "Warum schlagst du vor, dass man das so macht", wird es vielleicht geben.

Gruß,
Xaron
2 mal bearbeitet
14.06.2009 00:10 Uhr

 

Status: offline
@Xaron:
Erst einmal Danke für deinen Beitrag. Solche Beiträge sind leider in letzter Zeit selten geworden.

Ich möchte noch einmal darauf hinweisen, dass es kein Meisterwerk ist.
Zitat:
"scheme" direkt als Array speichern und nicht als String und dann explode() verwenden.

Für Schreibfaule, wie mich. Statt : hätte ich jedes Mal ',' schreiben müssen. Ich glaube kaum, das hier die Performance merklich sich verbessert. Achja hier der Nachtrag für andere Farbschemen.
php:
1
2
3
$scheme['office07'] =       '3f689a:9c403d:7d9847:685083:3b8ba1:ca7937:4e7fbb:be4f4c:99b958:7e63a0:4aaac4:f49445:a8b8d5:d7a8a7:c4d4aa';
        $scheme['grey']            =      '555555:9e9e9e:727272:464646:838383:c1c1c1:616161:b3b3b3:818181:505050:959595:dadada:afafaf:d2d2d2:bababa';
        $scheme['blue']            =      '30527a:365a86:3b6291:40699c:446fa4:4876ad:4b7bb5:4f81bd:6d91c3:85a0ca:99aed1:aabad7:b7c4dd:c5cfe2:d1d9e8';
Zitat:
In Konstruktoren NIE "return" verwenden

Wird gemacht.
php:
1
direkt ein Array übergeben und auf DataSeries verzichten
So beraube ich jeden Programmier, der die Klasse benutzt um die Möglichkeit, eigene Methoden hinzuzufügen:
  • function getDurchschnitt
  • function getMax
  • function countValues

Zitat:
render(){ doWork1(); doWork2(); doWordk3(); }

Meine Antwort:Information hiding. Hier wäre meine Frage:
Warum schlägst du vor, dass man das so macht
Zitat:
abstract Superklasse "ChartRenderer"

Zeit! Die Klasse ist nur ein netter Nebeneffekt. Natürlich habe ich über eine Abstrakt Klasse nachgedacht. Es ist nur so, dass ich die Klasse von klasse7dark einfach per copy-and-paste übernommen habe.

Ich möchte jetzt nicht undankbar für Tipps herübergekommen sein. Bei mir ist einfach die Zeit der begrenzte Faktor. Für Nebeneffekte, wie runde Diagramme steckte ich nicht viel Arbeit hinein.

Wenn ich mal viel Zeit haben werde, werde ich es umsetzen. Ich sehe es nur als Codesnippet, dass ich gerne mit der Community teilen möchte. Für alle anderen:
http://www.aditus.nu/jpgraph/

Zitat:
Mitglieder online: 5

Gute Nacht. Oder Guten Morgen je nachdem.
___________________________
<?php
if( $nickname === "wischoo"){
auf_die_Finger_hauen('Rasenkantenstein'); $nickname = "wieschoo"; } ?> http://www.wieschoo.com
14.06.2009 10:10 Uhr

 

Status: offline
Naja. Vielleicht kann man sich ja bei einem cDc-Remake (Code-DB oder was auch immer) mal richtig Gedanken über soetwas machen. zB gleich auf PHP5.3 aufzusetzen und sämtliche Skripte direkt in einem Namespace zu verpacken und damit quasi eine Art Framework oder Klassensammlung für andere Programmierer bereitzustellen.

Ich glaube ich hab auch schon angemerkt, dass es nicht perfekt ist, aber dennoch als Beispielcode recht gut gelungen und auf den meisten Rechnern direkt einsetzbar ist. (Bei mir fehlte leider die Möglichkeit jpeg zu erzeugen, also hab ich kurzerhand den Kram in png geändert). Ich persönlich hätte das Scheme vermutlich auch noch in einer Klasse gekapselt, weil man damit auch noch "Random-Schemes" hätte implementieren können. Und vielleicht wäre es auch sinnvoller erst eine einfache SVG-Grafik zu erzeugen und die anschließend in das gewünschte Format zu transformieren, weil umgekehrt ist schwierig und für jede Art von Diagramm mehrere Möglichkeiten zu schreiben halte ich für sinnfrei.
Genauso die Sache mit den Legenden: Man hätte eine komplette Klasse nutzen können um die Legende zu generieren, eine für den Graphen selbst und in der übergeordneten Klasse den ganzen Spaß zusammensetzen können. Generell könnte man überlegen, ob man nicht noch ein paar Hilfsklassen für die Bildverarbeitung oder Bildbearbeitung schreibt.
Wie auch immer: Ich halte recht viel von solchen Quick-and-Dirty Klassen. Immerhin kann man dadurch die Anforderungen an das (Teil)projekt genauer spezifizieren und anschließend eine gute Implementierung erreichen.

Was ich allerdings sehr interessant finde: Die Pro-Version von JpGraph kostet 85€ für eine Single-License und satte 650€ für eine Bulk-Lizenz. Wenn man überlegt, dass man zumindest die Pie-Diagramme in kaum mehr als 30 Zeilen Code (ohne das drum herum) schreiben kann... Naja. Leistet zwar wohl noch "etwas" mehr, aber dennoch halte ich den Preis für Wucher.
___________________________
C++ ist ein Esel mit Ledersitzen und elektrischen Fensterhebern, Java ist auch eine Insel und Python ist eine Schlange...
21.06.2009 18:11 Uhr

 

Status: offline
Ich habe mal versucht die Class produktiv einzusetzen.... - Sieht nur nicht wirklich schön aus  :wink: 

Füge gleich noch ein Bild davon an.

----------------------------------------------------
user-pic
1 Datei angehängt
1 mal bearbeitet
___________________________
http://Jackson-HOST.de
-> www.daniel-winter.de Wer da nicht wach wird ist TOT oder HipHopper
21.06.2009 18:45 Uhr

 

Status: offline
Ja ok,
sieht wirklich scheiße aus.

Ich weiß jetzt aber nicht, wie man das besser machen kann, bin für konstruktive Kritik offen.
___________________________
MFG Jan
"funzt nicht" ist keine gültige Fehlerbeschreibung!*haarerauf*
http://www.sysprofile.de/id30821
21.06.2009 19:20 Uhr

 

Status: offline
Zitat:
Ich weiß jetzt aber nicht, wie man das besser machen kann, bin für konstruktive Kritik offen.

Zweispaltige Anzeige der Farben / Prozentanzeige fällt mir da so ein. Dann ist es nach unten nicht mehr so überstehend.
Seite 3 von 41234
Ähnliche Threads Forum Ähnlichkeitsgrad
 PHP Chat - Lgin Seite umschreiben - CyDots zu verdienen Website & Webprogrammierung 1
 Fragen zur PHP Injection. Website & Webprogrammierung 1
 [gelöst] Null anfügen -> Problem bei Berechnung Website & Webprogrammierung 1
 PHP-Chat; DB oder txt? Traffic? Website & Webprogrammierung 1
 avachanger keine php unterstützung Website & Webprogrammierung 1
 [gelöst] Content-Type per .htaccess ändern Website & Webprogrammierung 1
 Root-Core - Coding meets GFX Das Promotion-Board 1
nach obennach oben

Copyright © 2010 cybton-network

Google
Partner: #Musik - Dein Internetradio - nexem. - .wir machen news - s.Oliver Onlineshop für Schuhe
ANEXIA - PHP Entwicklung - Dockers- Think Schuhe - der eigene Weg - Paul Green Damenschuhe - Bequeme Geox Schuhe - Web-Entwicklung - Fritz!Box Anrufmonitor für Mac OS - Rolladen, Markisen und Jalousien in Stuttgart - Rolladen in Stuttgart - SMSjobs