Anwendungsbeispiel
Wir stellen uns folgendes Szenario vor:
Sie sind Fondsmanager und bekommen täglich einen gewissen Anteil Geld. Diesen Investieren sie in Fonds. Sie wollen nun für Ihre Kunden eine wöchentliche Statistik über die Rendite der Fonds erstellen. Stellen wir uns weiter vor, dass wir unsere Daten in folgender CSV-Datei vorliegen haben:
Mo:10000:8432
Di:10000:12234
Mi:20000:23120
Do:10000:12321
Fr:5000:4033
Sa:2000:1023
So:5000:4002
Diese nennen wir umsatz.csv Folgende Bedeutung lassen wir dabei Mo:10000:8432 zukommen. Am Montag morgens investieren sie 10000 Euro. Am Montag abends bleiben Ihnen davon nur noch 8432 Euro.
Nun gehen wir wie folgt vor. Wir lesen die einzelnen Werte Zeilenweise ein und trennen diese voneinander. Als nächstes erstellen wir ein Image. Nun berechnen wir den den Gewinn oder Verlust und geben diesen pro Tag als Prozent an. Die einzelnen Tage geben wir als Balkendiagramm aus. Rot bedeutet dabei Verlust und Grün Gewinn. Am Schluss wollen wir noch einen blauen Strich als Durchschnitt der Woche verwenden. Und so sieht unser Code dabei aus:
/* gd13.c */
#include <stdio.h>
#include <gd.h>
#include <gdfontl.h>
#include <gdfontt.h>
#include <gdfonts.h>
#include <gdfontmb.h>
#include <gdfontg.h>
int main()
{
/*image initialisieren*/
gdImagePtr image;
FILE *png, *csv;
int black, white, red, green, grey, blue;
char tag[4];
int ausgaben, einnahmen=5;
float prozent;
int var=10, durchschnitt=0, schnitt=0;
char proz[3], schnitt_string[30];
/*Neues Image erstellen*/
image = gdImageCreate(160, 230);
if(image==NULL) { /*Fehler*/ exit(0); }
white=gdImageColorAllocate(image, 255, 255, 255);
black=gdImageColorAllocate(image, 0, 0, 0);
red =gdImageColorAllocate(image, 255, 0, 0);
green=gdImageColorAllocate(image, 0, 255, 0);
grey =gdImageColorAllocate(image, 127, 127, 127);
blue =gdImageColorAllocate(image, 0, 0, 255);
image->transparent = white;
proz[0]='\0';
csv=fopen("./umsatz.csv", "r");
if(csv==NULL) { fprintf(stderr, "Konnte CSV-Datei nicht öffnen\n");exit(0);}
while( fscanf(csv,"%[^:]:%d:%d\n", tag, &ausgaben, &einnahmen) != EOF)
{
/*Verlust-Gewinn Prozentual*/
prozent = (100 / (float)ausgaben) * (float)einnahmen;
printf("%.0f\n", prozent);
sprintf(proz,"%.0f%%", prozent-100);
if(prozent < 100.0){
gdImageFilledRectangle(image, var, prozent, var+20, 100, red);
gdImageString(image, gdFontTiny, var+2, 10, proz, black);
gdImageString(image, gdFontSmall, var+4, 190, tag, black);
}
else{
gdImageFilledRectangle(image, var, 100, var+20, prozent, green);
gdImageString(image, gdFontTiny, var+2, 10, proz, black);
gdImageString(image, gdFontSmall, var+4, 190, tag, black);
}
var+=20;
durchschnitt+=prozent;
proz[0]='\0';
}
durchschnitt/=7;
gdImageLine(image, 0, durchschnitt, 219, durchschnitt, blue);
/*Das Gittermuster.... */
gdImageLine(image, 10, 100, 199, 100, black);
for(var=10; var <160; var+=20)
gdImageDashedLine(image, var, 0, var, 199, black);
gdImageChar(image, gdFontSmall, 2, 95, '0', black);
gdImageChar(image, gdFontSmall, 2, 50, '-', black);
gdImageChar(image, gdFontSmall, 2, 150, '+', black);
schnitt=durchschnitt-100;
sprintf(schnitt_string, "Wochenschnitt : %d Prozent", schnitt);
gdImageString(image, gdFontSmall, 5, 210, schnitt_string, blue);
png = fopen("bild15.png", "wb");
gdImagePng(image, png);
fclose(png);
gdImageDestroy(image);
return 0;
}
Und so siehts aus:
Zugegeben das Beispiel hat jetzt nicht viel mit der Realität zu tun. War auch nicht meine Absicht. Es geht mir lediglich darum Ihnen zu zeigen wie einfach es ist ein Balken-Diagramm zu erstellen und ein wenig Anregung zu verschaffen. Sie sehen, es muss nicht immer Excel oder eine andere Tabellenkalkulationen sein um Diagramme zu erstellen.
