Diagramme
Wie erstelle ich Diagramme?

Sind entsprechende Daten vorhanden, bspw. Bevölkerungsdaten o.ä., so können diese als Diagramm im cardo/cardo.Map dargestellt werden.

diagramm_01.png

Bsp. Altersstatistik für einzelne Stadtteile der Stadt Cottbus.

Dazu sind Einstellungen für die Ebene unter Beschriftung/Ausgestaltung zu treffen und eine Datei diag.iws.design anzulegen.

Ein weiteres Beispiel ist in der Hilfe des IWAN-Mapservers zu finden.

Hinweis: Dieses Beispiel verwendete die Komponente ChartDirector. Dabei handelt es sich um ein Produkt der Firma ASE. Diese Komponente ist bereits auf dem Server installiert. Natürlich ist auch jede andere Komponente möglich, aber mit dem ChartDirector haben wir im Bereich Diagrammdarstellungen sehr gute Erfahrungen gemacht.

Für oben dargestelltes Beispiel sind folgende Angaben im Management Center notwendig:

  • Symboldefinition (da cardo für die Einstellungen ein Symbol benötigt, muss hier oder im Feld theSymbol ein kleiner schwarzer Punkt (eine Karteneinheit) eingerichtet werden)
  • theFile: ..\Paletten\Diag.iws.design (unter IWANStuff/Paletten ablegen, siehe dieser Paragraph)
  • theSizeField: 10000
  • theBasePoint: INTERIORPOINT
  • theAlign: cc
  • theScriptMakeImage: ja

diagramm_02.png

 

Datei diag.iws.design

if(not(firstCall));
   firstCall=true;
   // ChartDirector erzeugen
   ret=CreateObjectOnce(cd,"ChartDirector.API");
   // Breite / Höhe festlegen
   // alle gleich groß

   height=MathDiv($CURR_SIZE,$CURR_MAPSCALE)*2000;
   width=height;
   //the tilt angle of the pie
   angle=60;
   ret=CreateObject(data,"ARRAY");
   ret=CreateObject(labels,"ARRAY");
   //the Lables
   labels.Add("unter 18");
   labels.Add("18 bis 60");
   labels.Add("60 bis 75");
   labels.Add("über 75");
  
   pieWidth=height*0.5;
   pieHeight=height*0.5;

   pieRadius=width*0.1;
   depth=height/30;

   fntSize=depth*0.3;
   if(Compare(fntSize,6.5,lt));fntSize=6.5;endif;
   if(Compare(fntSize,10,gt));fntSize=10;endif;
else;
   ret=data.Empty();
endif;

c=cd.PieChart(int(width),int(height));
ret=c.setRoundedFrame();

//Create a PieChart object
//Set the center of the pie and the radius

ret=c.setPieSize(pieWidth,pieHeight,pieRadius);

//Set the depth and tilt angle of the 3D pie (-1 means auto depth)

ret=c.set3D(depth,angle);

ret=c.setTransparentColor(16777215);

//Daten aus den Spaltenwerten festlegen

ret=data.Add($ALTER_18);
ret=data.Add($ALTER_60);
ret=data.Add($ALTER_75);
ret=data.Add($ALTER_AB75);

//Labels erst ab ...
if(Compare($CURR_MAPSCALE,40000,le));
    s=c.setLabelStyle("Verdanab.ttf",fntSize);
    ret=s.setBackground(16711422, 12, 0);
    ret=c.setLabelPos(fntSize*2, cd.LineColor)

    ret=c.setData(data,labels);
else;
    ret=c.setLabelStyle("", 8, cd.Transparent)
    ret=c.setData(data);
   
endif;

// zeichnen und als binär ausgeben
DrawImage(c.makeChart2(0),0,0);

//Hinweis:
//ret=data.Add($ALTER_18); Großschreibung der Spaltenwerte beachten!
Beispiel für Balkendiagramme

Die Einstellungen für die Ebene können Sie aus dem vorhergehenden Paragraphen übernehmen:

  • Symboldefinition (da cardo für die Einstellungen ein Symbol benötigt, kann hier oder im Feld theSymbol ein kleiner schwarzer Punkt (eine Karteneinheit) eingerichtet werden)
  • theFile: ..\Paletten\Diag.iws.design (unter IWANStuff/Paletten ablegen, siehe dieser Paragraph)
  • theSizeField: 10000
  • theBasePoint: INTERIORPOINT
  • theAlign: cc
  • theScriptMakeImage: ja

balkendiagramm.png

Folgendes Skript kann genutzt werden:
// ChartDirector erzeugen
ret=CreateObjectOnce(cd,"ChartDirector.API");
// Breite / Höhe festlegen
// alle gleich groß
height=MathDiv($CURR_SIZE,$CURR_MAPSCALE)*5000;
width=height;   
// Anlegen Arrays Daten + Labels
ret=CreateObject(data,"ARRAY");
ret=CreateObject(labels,"ARRAY");
// Labels
ret=labels.Add("1");
ret=labels.Add("2");
ret=labels.Add("3");
ret=labels.Add("4");
ret=labels.Add("5");
ret=labels.Add("6");
ret=labels.Add("7");
// Daten aus den Spalten
ret=data.Add($UNBELASTET);
ret=data.Add($GERING_BELASTET);
ret=data.Add($MAESSIG_BELASTET);
ret=data.Add($KRITISCH_BELASTET);
ret=data.Add($STARK_VERSCHMUTZT);
ret=data.Add($SEHR_STARK_VERSCHMUTZT);
ret=data.Add($KEIN_WERT);
// Create a XYChart object of size 250 x 250 pixels
// c=cd.XYChart(int(width),int(height));
c=cd.XYChart(250,250);
// Set the plotarea at (30, 20) and of size 200 x 200 pixels
ret=c.setPlotArea(30, 20, 200, 200);
// Add a bar chart layer using the given data
ret=c.addBarLayer3(data);
// Set the labels on the x axis.
// error function "Can't find Variable"
ax=c.xAxis();
ret=ax.setLabels(labels);

//Graphik zeichnen
DrawImage(c.makeChart2(0),0,0);

Tipps für die Beschriftung der x-Achse

Anpassung der Schriftgröße

ax=c.xAxis();

ret=ax.setLabelStyle("Arial",8)

Anpassung des Winkels

ax=c.xAxis();
ab=ax.setLabels(labels);
ret=ab.setFontAngle(45);

diagramm_beschriftung.png

weitere Tipps

Ergänzung der Beschriftung der Labels, bswp für ein Tortendiagramm

labels.Add(printf(E"Elbe\n%.2f €",$BETRAG));

Zum Wort Elbe wird auf der nächsten Zeile die Spalte Betrag ausgelesen und formatiert ausgegeben. Der Prozentwert kommt direkt aus den Daten.

Formatierung der Daten des Labels auf keine Stelle nach dem Komma

ret=c.setLabelFormat(E"{label}\n{value|0}%");

Formatierung der Daten mit Tausender-Trennzeichen

ret=c.setNumberFormat(".");

Hinzufügen eines Titels für y-Achse für Balkendiagramm

ay=c.yAxis();

ret=ay.setLabelStyle("Calibri",fntSize)

ret=ay.setTitle("Angaben in Euro", "Calibri", fntSize, 0x555555);

Anpassen von Farben im Kreisdiagramm (hier bei 4 Spalten)

ret=CreateObject(colors,"ARRAY");
ret=colors.Add(0xFF00FF);
ret=colors.Add(0x9900FF);
ret=colors.Add(0x3D85C6);
ret=colors.Add(0x00FFFF);
ret=c.setColors2(8,colors);

Maßstabsabhängigkeit

if(Compare($CURR_MAPSCALE,15000,le));

layer=c.addBarLayer3(data,colors,labels);

//Labeldefinition

..

//Diagramm zeichnen

...

endif;