template

Index :: HTML :: Diagramme/Statistiken

Die numerische Präsentation von Werten kann mit einfachen HTML-Mitteln um grafische Elemente (wie z.B. farbige Balken) erweitert werden, um die Lesbarkeit und Beurteilung der Daten zu erleichtern.

Ein wichtiger Punkt ist die Wahl eines passenden Maßstabs:
Ausserdem zu beachten:
Obige Richtlinien gelten allgemein für alle Arten von Diagrammen, egal, ob es sich um Balken, Flächen, Punkte oder sonstige Objekte handelt.

Der in den Beispielen aufgelistete HTML-Code wird in der Praxis natürlich von PHP generiert, normalerweise mithilfe von Schleifen und Datenbankzugriffen.


Prozentangaben

Das Beispiel verwendet horizontale Balken, weil die Beschriftung hierbei einfacher ist als bei stehenden Balken.
Die Balkenzellen besitzen ein Hintergrundmuster (vertikale Hilfslinien), welches einen seitlichen Zellen-Padding-Wert von 2 Pixeln voraussetzt. Diese Forderung wird hier durch einen allgemeinen cellpadding-Wert von 2 für die Gesamttabelle erfüllt.
Damit das Hintergrundmuster in der Breite komplett sichtbar ist, muss mindestens 1 Balkenzelle einen width-Wert von 100 besitzen.

Alpha 36 %
Beta 47 %
Gamma 9 %
Delta 97 %
<table align='center' bgcolor='#E0E0E0' cellspacing='0' cellpadding='2' style='BORDER:1px solid #D0D0D0'><tr>
<td>Alpha</td>
<td align='right'><b>36</b> %</td>
<td width='100' background='img/bgProzH.gif'>
<div style='WIDTH:36;HEIGHT:8;BACKGROUND:#6060FF'><img src='img/i1Spc.gif'></div></td>
</tr><tr>
<td>Beta</td>
<td align='right'><b>47</b> %</td>
<td background='img/bgProzH.gif'>
<div style='WIDTH:47;HEIGHT:8;BACKGROUND:#6060FF'><img src='img/i1Spc.gif'></div></td>
</tr><tr>
<td>Gamma</td>
<td align='right'><b>9</b> %</td>
<td background='img/bgProzH.gif'>
<div style='WIDTH:9;HEIGHT:8;BACKGROUND:#6060FF'><img src='img/i1Spc.gif'></div></td>
</tr><tr>
<td>Delta</td>
<td align='right'><b>97</b> %</td>
<td background='img/bgProzH.gif'>
<div style='WIDTH:97;HEIGHT:8;BACKGROUND:#6060FF'><img src='img/i1Spc.gif'></div></td>
</tr></table>

Alternativ können für die Darstellung von Balken und Skalenfläche auch Images verwendet werden. Dazu reichen im einfachsten Falle minimale Grafiken von 1 x 1 Pixel und entsprechender Farbe, die dann mittels width- und height-Attribut auf passende Größe gebracht werden:

Auslastung 62 %
<table bgcolor='#E0E0E0' align='center' cellspacing='0' cellpadding='2'><tr>
<td>Auslastung</td>
<td><img src='img/i1Blue.gif' width='62' height='8'><img src='img/i1White.gif' width='38' height='8'></td>
<td>62 %</td>
</tr></table>

Horizontale Skalen

Die Beschriftung der X-Achse erfolgt hier nicht durch Text sondern durch eine Grafik. Damit ist gewährleistet, dass die Skala auch bei Schriftgrößenänderung ihr korrektes Aussehen behält.
Mittels Hintergrundgrafik erhalten die Balkenzellen ihre senkrechten Hilfslinien.

 
2003: 81
2004: 175
2005: 238
2006: 349
<table bgcolor='#E0E0E0' align='center' cellspacing='0' cellpadding='2' style='BORDER:1px solid #D0D0D0'><tr>
<td colspan='2'>&nbsp;</td>
<td style='PADDING:0' valign='bottom'><img src='img/Ska500h.gif'></td>
</tr><tr>
<td>2003:</td>
<td align='right'><b>81</b></td>
<td style='PADDING:0' background='img/bg100h.gif'>
<div style='WIDTH:81;HEIGHT:8;BACKGROUND:#FF00FF'><img src='img/i1Spc.gif'></div></td>
</tr><tr>
<td>2004:</td>
<td align='right'><b>175</b></td>
<td style='PADDING:0' background='img/bg100h.gif'>
<div style='WIDTH:175;HEIGHT:8;BACKGROUND:#FF00FF'><img src='img/i1Spc.gif'></div></td>
</tr><tr>
<td>2005:</td>
<td align='right'><b>238</b></td>
<td style='PADDING:0' background='img/bg100h.gif'>
<div style='WIDTH:238;HEIGHT:8;BACKGROUND:#FF00FF'><img src='img/i1Spc.gif'></div></td>
</tr><tr>
<td>2006:</td>
<td align='right'><b>349</b></td>
<td style='PADDING:0' background='img/bg100h.gif'>
<div style='WIDTH:349;HEIGHT:8;BACKGROUND:#FF00FF'><img src='img/i1Spc.gif'></div></td>
</tr></table>
Falls sichergestellt ist, dass die angezeigten Werte unter einem bestimmten Maximalwert bleiben, kann die Skalenbeschriftung (wie in obigem Beispiel [0...500]) aus einem einzelnen Bild bestehen.
Oft ist die Länge der Skala zur Entwicklungszeit jedoch schlecht einzuschätzen, vor allem dann, wenn die Werte später zur Laufzeit aus einer sich ständig verändernden Datenbank gelesen werden. Um hier auf flexible Weise eine optimale Skala zu erzeugen, könnte man sie auch nach Bedarf aus Einzelelementen zusammenstellen. Die aneinandergereihten Images müssen evtl. von einem <nowrap>-Tag umschlossen werden, um bei breiten Diagrammen einen Umbruch zu verhindern.

Elemente für den Maßstab 1:1 (1 Pixel = 1 Einheit):

[0...100] 10er-Werte 100er-Punkte Hintergrund

Elemente für den Maßstab 1:2 (1 Pixel = 2 Einheiten):

[0...100] 10er-Werte Die Grafiken für 100er-Punkte (200...800)
sind die selben wie beim 1:1-Maßstab
Hintergrund

Elemente für den Maßstab 1:10 (1 Pixel = 10 Einheiten):

[0...1000] 100er-Werte 1000er-Punkte Der Hintergrund entspricht
dem 1:1-Maßstab

Elemente für den Maßstab 1:20 (1 Pixel = 20 Einheiten):

[0...1000] 100er-Werte Die Grafiken für 1000er-Punkte (2000...8000)
sind die selben wie beim 1:10-Maßstab
Der Hintergrund entspricht
dem 1:2-Maßstab

Beispiel für eine montierte Skala mit Maßstab 1:20:

Zugriffe
Januar: 3185
Februar: 2904
März: 3652
<table bgcolor='#E0E0E0' align='center' cellspacing='0' cellpadding='2' style='BORDER:1px solid #D0D0D0'><tr>
<td colspan='2'>Zugriffe</td>
<td style='PADDING:0' valign='bottom'><img
src='img/Ska1000h2.gif'><img
src='img/Ska100_900h2.gif'><img
src='img/SkaPt2000h.gif'><img
src='img/Ska100_900h2.gif'><img
src='img/SkaPt3000h.gif'><img
src='img/Ska100_900h2.gif'></td>
</tr><tr>
<td align='right'>Januar:</td>
<td><b>3185</b></td>
<td style='PADDING:0' background='img/bg100h2.gif'>
<div style='WIDTH:159;HEIGHT:8;BACKGROUND:#FF00FF'><img src='img/i1Spc.gif'></div></td>
</tr><tr>
<td align='right'>Februar:</td>
<td><b>2904</b></td>
<td style='PADDING:0' background='img/bg100h2.gif'>
<div style='WIDTH:145;HEIGHT:8;BACKGROUND:#FF00FF'><img src='img/i1Spc.gif'></div></td>
</tr><tr>
<td align='right'>M&auml;rz:</td>
<td><b>3652</b></td>
<td style='PADDING:0' background='img/bg100h2.gif'>
<div style='WIDTH:183;HEIGHT:8;BACKGROUND:#FF00FF'><img src='img/i1Spc.gif'></div></td>
</tr></table>

Vertikale Skalen

Wie bei der horizontalen Achsenbeschriftung ist auch hier die Verwendung von Grafiken zu empfehlen, die je nach Bedarf montiert werden.

Elemente für den Maßstab 1:1 (1 Pixel = 1 Einheit):

[0...100] [...200] [...300] [...400] [...500] Hintergrund

Elemente für den Maßstab 1:10 (1 Pixel = 10 Einheiten):

[0...1000] [...2000] [...3000] [...4000] [...5000] Hintergrund
entspricht
M 1:1

Beispiel für ein Diagramm mit montierter vertikaler Skala und mehreren Balkentypen:



  Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
  2005 2006
<table align='center' cellspacing='0' cellpadding='0' style='BORDER:1px solid #A0A0A0'>
<tr valign='bottom' background='img/bg100up.gif'>
<td bgcolor='#E0E0E0'><img src='img/SkaTo300up.gif'><br>
<img src='img/SkaTo200up.gif'><br>
<img src='img/Ska100up.gif'></td>
<td width='4'></td>
<td><div style='WIDTH:6;HEIGHT:45;BACKGROUND:#40F040;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:100;BACKGROUND:#00A0FF;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:145;BACKGROUND:#4000D0;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:10;BACKGROUND:#FF4060;'><img src='img/i1Spc.gif'></div></td>
<td width='4'></td>
<td width='4'></td>
<td><div style='WIDTH:6;HEIGHT:55;BACKGROUND:#40F040;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:105;BACKGROUND:#00A0FF;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:160;BACKGROUND:#4000D0;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:11;BACKGROUND:#FF4060;'><img src='img/i1Spc.gif'></div></td>
<td width='4'></td>
<td width='4'></td>
<td><div style='WIDTH:6;HEIGHT:65;BACKGROUND:#40F040;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:95;BACKGROUND:#00A0FF;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:160;BACKGROUND:#4000D0;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:12;BACKGROUND:#FF4060;'><img src='img/i1Spc.gif'></div></td>
<td width='4'></td>
<td width='4'></td>
<td><div style='WIDTH:6;HEIGHT:75;BACKGROUND:#40F040;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:110;BACKGROUND:#00A0FF;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:185;BACKGROUND:#4000D0;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:14;BACKGROUND:#FF4060;'><img src='img/i1Spc.gif'></div></td>
<td width='4'></td>
<td width='4'></td>
<td><div style='WIDTH:6;HEIGHT:45;BACKGROUND:#40F040;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:100;BACKGROUND:#00A0FF;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:145;BACKGROUND:#4000D0;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:17;BACKGROUND:#FF4060;'><img src='img/i1Spc.gif'></div></td>
<td width='4'></td>
<td width='4'></td>
<td><div style='WIDTH:6;HEIGHT:55;BACKGROUND:#40F040;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:105;BACKGROUND:#00A0FF;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:177;BACKGROUND:#4000D0;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:21;BACKGROUND:#FF4060;'><img src='img/i1Spc.gif'></div></td>
<td width='4'></td>
<td width='4'></td>
<td><div style='WIDTH:6;HEIGHT:65;BACKGROUND:#40F040;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:95;BACKGROUND:#00A0FF;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:160;BACKGROUND:#4000D0;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:22;BACKGROUND:#FF4060;'><img src='img/i1Spc.gif'></div></td>
<td width='4'></td>
<td width='4'></td>
<td><div style='WIDTH:6;HEIGHT:75;BACKGROUND:#40F040;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:110;BACKGROUND:#00A0FF;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:218;BACKGROUND:#4000D0;'><img src='img/i1Spc.gif'></div></td>
<td><div style='WIDTH:6;HEIGHT:20;BACKGROUND:#FF4060;'><img src='img/i1Spc.gif'></div></td>
<td width='4'></td>
</tr><tr bgcolor='#FFFFFF'>
<td bgcolor='#E0E0E0'>&nbsp;</td>
<td colspan='6' align='center'>Q1</td>
<td colspan='6' align='center'>Q2</td>
<td colspan='6' align='center'>Q3</td>
<td colspan='6' align='center'>Q4</td>
<td colspan='6' bgcolor='#F0F0F0' align='center'>Q1</td>
<td colspan='6' bgcolor='#F0F0F0' align='center'>Q2</td>
<td colspan='6' bgcolor='#F0F0F0' align='center'>Q3</td>
<td colspan='6' bgcolor='#F0F0F0' align='center'>Q4</td>
</tr><tr bgcolor='#FFFFFF'>
<td bgcolor='#E0E0E0'>&nbsp;</td>
<td colspan='24' align='center'><b>2005</b></td>
<td colspan='24' bgcolor='#F0F0F0' align='center'><b>2006</b></td>
</tr></table>
Bei mehreren Balkenfarben sollte dem Diagramm eine Legende hinzugefügt werden:

Alpha  
Beta  
Gamma  
Delta
<table align='center' cellspacing='0' cellpadding='2' style='BORDER:1px solid #A0A0A0'>
<tr bgcolor='FFFFFF'>
<td><div style='WIDTH:8;HEIGHT:8;BORDER:1px solid #000;BACKGROUND:#40F040;'><img src='img/i1Spc.gif'></div></td>
<td>Alpha&nbsp;&nbsp;</td>
<td><div style='WIDTH:8;HEIGHT:8;BORDER:1px solid #000;BACKGROUND:#00A0FF;'><img src='img/i1Spc.gif'></div></td>
<td>Beta&nbsp;&nbsp;</td>
<td><div style='WIDTH:8;HEIGHT:8;BORDER:1px solid #000;BACKGROUND:#4000D0;'><img src='img/i1Spc.gif'></div></td>
<td>Gamma&nbsp;&nbsp;</td>
<td><div style='WIDTH:8;HEIGHT:8;BORDER:1px solid #000;BACKGROUND:#FF4060;'><img src='img/i1Spc.gif'></div></td>
<td>Delta</td>
</tr></table>
Die exakten Einzelwerte sind bei stehenden Balken schlecht ins Diagramm zu integrieren. Normalerweise werden diese Werte dann in einer separaten Tabelle aufgeführt, z.B.:

 
Alpha
Beta
Gamma
Delta
2005Q1 4510014510
Q2 5510516011
Q3 659516012
Q4 7511018514
2006Q1 4510014517
Q2 5510517721
Q3 659516022
Q4 7511021820
<table bgcolor='A0A0A0' align='center' cellspacing='1' cellpadding='2'><tr bgcolor='F0F0F0'>
<td colspan='2'>&nbsp;</td>
<td align='center'>
<div style='WIDTH:8;HEIGHT:8;BORDER:1px solid #000;BACKGROUND:#40F040;'><img src='img/i1Spc.gif'></div>Alpha</td>
<td align='center'>
<div style='WIDTH:8;HEIGHT:8;BORDER:1px solid #000;BACKGROUND:#00A0FF;'><img src='img/i1Spc.gif'></div>Beta</td>
<td align='center'>
<div style='WIDTH:8;HEIGHT:8;BORDER:1px solid #000;BACKGROUND:#4000D0;'><img src='img/i1Spc.gif'></div>Gamma</td>
<td align='center'>
<div style='WIDTH:8;HEIGHT:8;BORDER:1px solid #000;BACKGROUND:#FF4060;'><img src='img/i1Spc.gif'></div>Delta</td>
</tr><tr bgcolor='FFFFFF' valign='top'>
<td rowspan='4' bgcolor='F0F0F0'><b>2005</b></td><td bgcolor='F0F0F0'>Q1</td>
<td align='center'>45</td><td align='center'>100</td><td align='center'>145</td><td align='center'>10</td>
</tr><tr bgcolor='FFFFFF'>
<td bgcolor='F0F0F0'>Q2</td>
<td align='center'>55</td><td align='center'>105</td><td align='center'>160</td><td align='center'>11</td>
</tr><tr bgcolor='FFFFFF'>
<td bgcolor='F0F0F0'>Q3</td>   
<td align='center'>65</td><td align='center'>95</td><td align='center'>160</td><td align='center'>12</td>
</tr><tr bgcolor='FFFFFF'>
<td bgcolor='F0F0F0'>Q4</td>
<td align='center'>75</td><td align='center'>110</td><td align='center'>185</td><td align='center'>14</td>
</tr><tr bgcolor='FFFFFF' valign='top'>
<td rowspan='4' bgcolor='F0F0F0'><b>2006</b></td><td bgcolor='F0F0F0'>Q1</td>
<td align='center'>45</td><td align='center'>100</td><td align='center'>145</td><td align='center'>17</td>
</tr><tr bgcolor='FFFFFF'>
<td bgcolor='F0F0F0'>Q2</td>
<td align='center'>55</td><td align='center'>105</td><td align='center'>177</td><td align='center'>21</td>
</tr><tr bgcolor='FFFFFF'>
<td bgcolor='F0F0F0'>Q3</td>
<td align='center'>65</td><td align='center'>95</td><td align='center'>160</td><td align='center'>22</td>
</tr><tr bgcolor='FFFFFF'>
<td bgcolor='F0F0F0'>Q4</td>
<td align='center'>75</td><td align='center'>110</td><td align='center'>218</td><td align='center'>20</td>
</tr></table>
Alternativ könnte man bei der Texttabelle den Zeitstrang auch horizontal verlaufen lassen, so wie es beim Balkendiagramm der Fall ist. Zum einen entsteht dadurch eine intuitivere Von-links-nach-rechts-Leseweise, zum anderen wird die Bildschirmbreite bei größerer Anzahl von Messpunkten besser ausgenutzt:

  2002 2003 2004 2005 2006
Quartal 1234 1234 1234 1234 1234
Alpha 19212524 22242738 25293347 45556575 45556575
Beta 55596060 61647279 859192104 10010595110 10010595110
Gamma 12375648 306686111 93116128164 145160160185 145177160218
Delta 2234 5725 85911 10111214 17212220

Füllmuster

Um Balken- oder Flächentypen augenfälliger zu markieren, lassen sich DIVs auch mit einem Hintergrundmuster versehen:
<div style='WIDTH:100;HEIGHT:12;BACKGROUND:url(blabla.gif);'><img src='img/i1Spc.gif'></div>
Einige Beispiele (2-farbig):

GrafikMuster

Index :: HTML


template