Code-Beispiel
Balken- und Kreisdiagramme
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | Lothar Schirm | 08.09.2007 |
In Ergaenzung zur Darstellung von Funktionen im Koordinatensystem wird hier die Erzeugung von Balken- und Kreisdiagrammen dargestellt.
DECLARE SUB OutText(x AS SINGLE, y AS SINGLE, Text AS STRING, _
Ausrichtung AS STRING)
DECLARE SUB Balkendiagramm(x() AS STRING, y() AS SINGLE, n AS INTEGER, _
ymin AS SINGLE, ymax AS SINGLE, ny AS INTEGER, _
hor AS STRING, vert AS STRING, Text AS STRING, _
Farbe AS INTEGER)
DECLARE SUB Kreisdiagramm(x() AS STRING, y() AS SINGLE, n AS INTEGER, _
Text AS STRING)
'------------------------ Kleines Beispielprogramm ----------------------------
DIM AS STRING x(7)
DIM AS SINGLE y(7)
DIM AS INTEGER i
SCREEN 0
CLS
PRINT "Testprogramm fuer Kreis- und Balkendiagramme"
PRINT
PRINT "Folgende Tabelle wird graphisch ausgewertet:"
PRINT
PRINT "Umsaetze 2000 - 2007"
PRINT "Jahr", "Mio EUR"
FOR i = 0 TO 7
x(i) = STR(2000 + i)
y(i) = 30 + 50 * RND(i)
PRINT x(i), y(i)
NEXT i
PRINT
PRINT "Weiter: Beliebige Taste"
GETKEY
SCREEN 12
COLOR 0, 15
CLS
Balkendiagramm(x(), y(), 7, 0, 100, 10, "Jahr", "Mio EUR", _
"Umsaetze 2000 - 2007", 4)
LOCATE 29, 30
PRINT "Weiter: Beliebige Taste"
GETKEY
CLS 0
Kreisdiagramm(x(), y(), 7, "Umsaetze 2000 - 2007")
LOCATE 29, 30
PRINT "Beenden: Beliebige Taste"
GETKEY
'-------------------------------- Beispielprogramm Ende -----------------------
SUB OutText(x AS SINGLE, y AS SINGLE, Text AS STRING, Ausrichtung AS STRING)
' Gibt einen Text an pixelgenauen Koordinaten aus
' - x, y = (Sicht)koordinaten
' - Text = auszugebender Text
' - Ausrichtung = Position des Textes bezueglich (x, y):
' "l": linksbuendig (d.h. Text rechts von (x, y)
' "r": rechtsbuendig (d.h. Text links von (x, y)
' "z": zentriert.
DIM AS INTEGER xp, yp
'Umwandlung in Pixelkoordinaten:
xp = PMAP(x, 0)
yp = PMAP(y, 1) - 8
'Text plazieren:
SELECT CASE LCASE(Ausrichtung)
CASE "l": DRAW STRING (xp, yp), Text
CASE "r": DRAW STRING (xp - 8 * LEN(Text), yp), Text
CASE "z": DRAW STRING (xp - 8 * LEN(Text) / 2, yp), Text
END SELECT
END SUB
SUB Balkendiagramm(x() AS STRING, y() AS SINGLE, n AS INTEGER, ymin AS SINGLE, _
ymax AS SINGLE, ny AS INTEGER, hor AS STRING, _
vert AS STRING, Text AS STRING, Farbe AS INTEGER)
'- x(0) bis x(n) = Benennung der Balken
'- y(0) bis y(n) = Wert der Balken
'- n + 1 = Anzahl der Balken
'- ymin, ymax = Abmessung vertikale Achse (ymin muss <= 0 sein!)
'- ny = Anzahl der Achsenabschnitte auf der vertikalen Achse
'- hor = Beschriftung horizontale Achse
'- vert = Beschriftung vertikale Achse (max 13 Zeichen)
'- Text = Bildunterschrift
'- Farbe = Farbe
DIM AS SINGLE Balkenpos(n), xmin, xmax, ay, y0, Breite
DIM AS INTEGER xlo, ylo, xru, yru, i
VIEW
WINDOW SCREEN
'Pixelkoordinaten des Darstellungsfeldes: xlo = xlinksoben usw.
xlo = 8 * 15 'Textspalte 15
ylo = 16 * 2 'Textzeile 2
xru = 8 * 75 'Textspalte 75
yru = 16 * 22 'Textzeile 22
'Beschriftung vertikale Achse:
OutText(xlo, ylo, STR(ymax) + SPACE(1), "r")
OutText(xlo, yru, STR(ymin) + SPACE(1), "r")
OutText(xlo, (ylo + yru) / 2, vert + SPACE(1), "r")
'Beschriftung horizontale Achse:
FOR i = 0 TO n
OutText(xlo + (xru - xlo) * (i + 0.5) / (n + 1), yru + 16, STR(x(i)), "z")
NEXT i
OutText((xlo + xru) / 2, yru + 32, hor, "z")
'Bildunterschrift:
OutText((xlo + xru) / 2, yru + 48, Text, "z")
'Fenster fuer Graphik in Sichtkoordinaten definieren:
VIEW (xlo, ylo)-(xru, yru)
xmin = 0: xmax = 100
WINDOW (xmin, ymin)-(xmax, ymax)
'Rahmen zeichnen:
LINE (xmin, ymin)-(0.995 * xmax, 0.995 * ymax), , B
'Teilung vertikale Achse:
ay = 0.995 * (ymax - ymin) / ny
FOR i = 0 TO ny
y0 = ymin + i * ay
LINE (xmin, y0)-(xmax, y0)
NEXT i
'Balken zeichnen:
Breite = 0.8 * (xmax - xmin) / (n + 1)
FOR i = 0 TO n
Balkenpos(i) = xmin + (i + 0.1) * (xmax - xmin) / (n + 1)
LINE(Balkenpos(i), 0) - (Balkenpos(i) + Breite, y(i)), Farbe, BF
NEXT i
END SUB
SUB Kreisdiagramm(x() AS STRING, y() AS SINGLE, n AS INTEGER, Text AS STRING)
'- x(0) bis x(n) = Bezeichnung der Kreissegmente
'- y(0) bis y(n) = Wert der Kreissegmente
'- n + 1 = Anzahl der Kreissegmente
'- Text = Bildunterschrift
DIM AS SINGLE alpha(n), r, sum, xp, yp, beta
DIM AS INTEGER i, x0, y0
CONST pi = 3.141593
VIEW
WINDOW SCREEN
'Diagramm berechnen und segmentweise zeichnen (alpha(0) bis alpha(n) sind
'die zu y(0) bis y(n) zugehoerigen Winkel im Kreis:
x0 = 320
y0 = 200
r = 160
sum = 0
FOR i = 0 TO n
sum = sum + y(i)
NEXT i
alpha(0) = 2 * pi * y(0) / sum
FOR i = 1 TO n
alpha(i) = 2 * pi * y(i) / sum + alpha(i - 1)
NEXT i
CIRCLE (x0, y0), r,, 0, -alpha(0)
FOR i = 1 TO n
CIRCLE (x0, y0), r,, alpha(i - 1), -alpha(i)
NEXT i
'Diagramm-Segmente faerben und beschriften:
FOR i = 0 TO n
IF i = 0 THEN beta = alpha(0) / 2 ELSE beta = (alpha(i) + alpha(i - 1)) / 2
xp = x0 + 0.5 * r * COS(beta)
yp = y0 - 0.5 * r * SIN(beta)
PAINT (xp, yp), i MOD 15, LOWORD(COLOR)
xp = x0 + 1.1 * r * COS(beta)
yp = y0 - 1.1 * r * SIN(beta)
IF alpha(i) > pi/2 AND alpha(i) < 3*pi/2 THEN
OutText(xp, yp, x(i) + ": " + STR(y(i)), "r")
ELSE
OutText(xp, yp, x(i) + ": " + STR(y(i)), "l")
END IF
NEXT i
'Bildunterschrift:
LOCATE 25, (80 - LEN(Text)) / 2
PRINT Text
END SUB
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|
|