Kuchen- & Säulengrafik Y 1.0

Grafische Darstellungsformen

Da normale Zahlentabellen meist unanschaulich und schwer zu verarbeiten sind, gibt es die Möglichkeit, sie grafisch umzusetzen. So kann man z. B. die Werte im normalen zweidimensionalen Koordinatensystem darstellen, wie es bei mathematischen Funktionen üblich ist. Im Gegensatz zu reinen Zahlenwerten kann man anhand eines solchen Diagrammes das Verhältnis der Werte zueinander wesentlich besser erfassen. Ein weiterer Vorteil dieser Darstellungsart liegt im sofortigen Erkennen von Steigungsveränderungen. Dies ist zum Beispiel bei der Auswertung von Meßergebnissen wichtig oder bei der Analyse von Verkaufszahlen.

Eine optisch ansprechendere Darstellungsweise erhält man mit dem Balkendiagramm. Hierbei hat man die Möglichkeit, die Werte durch verschiedene Farben oder Schraffuren zu unterscheiden oder Gemeinsamkeiten hervorzuheben.

Eine erweiterte Form dieser Grafikart ist die Säulengrafik. Der Unterschied zur Balkengrafik liegt darin, daß hier eine Räumlichkeit durch die dreidimensionale Darstellung erzeugt wird. Hiermit können auch mehrspaltige Säulenreihen erstellt werden wie es bei hochwertigen Programmpaketen (z.B. OPEN ACCESS) realisiert ist.

Auch die Kuchengrafik ist eine oft verwendete Form der grafischen Darstellung. Sie liefert übersichtliche und vor allem kompakte Bilder und wird gerne zur prozentualen Darstellung benutzt. Doch nun noch einige Worte zum Programm selbst. Das Programm „Kuchen- & Säulengrafik“ gibt die eingegebenen Werte als Säulen- und Kuchengrafik und als Diagramm aus. Bei der Eingabe ist zu beachten, daß das Programm momentan nur 18 Werte annimmt und dann automatisch mit der Berechnung beginnt; dies kann natürlich geändert werden. Die Eingabe kann man jederzeit mit „ ★ “ beenden. Das Programm stellt dann das Gesamtbild zusammen. Es werden dabei alle Grafikarten, jedoch ohne Werte, dargestellt. Zusätzlich erscheint das Menü, mit dem man nun jede beliebige Grafik auf den gesamten Bildschirm vergrößern kann. Zu dieser Vergrößerung werden auch die Werte ausgegeben. Zwischen den Grafiken und der Gesamtdarstellung kann nun beliebig umgeschaltet werden. Dazu wird nur der entsprechende Anfangsbuchstabe gedrückt.

Bei dieser Eingabe werden Groß- und Kleinbuchstaben vom Programm abgefragt, da der INPUT$-Befehl eine Unterscheidung zwischen Groß- und Kleinschrift macht und somit bei versehentlichem Drücken der CAPSLOCK Taste nicht mehr reagiert.

Das Unterprogramm zum Zeichnen der Säulen ist etwas kompliziert geworden. Dies liegt an der gewählten Darstellungsweise, bei der sich die Säulen zum Teil überschneiden. Es ist deshalb notwendig, die unter der Nebensäule liegenden Linien wegfallen zu lassen. Da es viele verschiedene Überlagerungssituationen gibt, ist es notwendig jede Linie getrennt zu untersuchen. Dies erklärt die hohe Anzahl an Abfragen und Variablen für die Säulengrafikroutine.

Wenn die eingegebnen Werte kleine ’Kuchenstücke’ erzeugen sollen, wird man feststellen müssen, daß diese Stücke im Kuchen einfach fehlen. Das Basic schafft es nicht Teilstücke mit kleiner Bogenlänge darzustellen. Dies hat den unschönen Effekt, daß der Außenkreis nicht immer geschlossen ist, sondern eventuell Lücken aufweist. In diesem Programm wurde deshalb zusätzlich ein Kreis gezogen. Eine einwandfreie Kuchenroutine müßte man sich allerdings selbst erstellen.

Beim Unterprogramm „Beschriftung“ fällt auf, daß der GOTOXY-Befehl nur jeden zweiten Bildschirmpunkt anspringen kann. Für eine genaue Beschriftung der Diagramme wurde deshalb der SPC-Befehl benutzt. Da dieser jedoch die Bildschirmzeile bis zum Positionierungspunkt löscht, muß man die Werte von rechts nach links schreiben.

Beim Eingeben des Programms müssen die Zeilennummern nicht, wie im Listing angegeben, abgetippt werden. Sie können beliebig gewählt werden, weil das Programm keine Sprünge zu Zeilennummern enthält. Zum besseren Verständnis des Listings wurde ausschließlich mit Labels gearbeitet, die im Klartext ausdrücken wohin der Sprung erfolgt. Somit entfällt ein umständliches Suchen nach Sinn und Auswirkung des Sprunges. Das Programm ist so angelegt, daß es leicht den eigenen Anforderungen angepaßt werden kann. Das Listing besitzt eine übersichtliche TOP-DOWN-Struktur, von der aus die verschiedenen Unterprogramme aufgerufen werden. Als Unterprogramme sind die Zeichenroutinen für die verschiedenen Grafiken und die Beschriftungen angelegt. Fast alle in diesen Routinen verwendeten Koordinaten sind als Parameter definiert und somit leicht abzuändern. Die Parameter werden vor dem Aufruf des jeweiligen Unterprogramms definiert.

Programmdokumentation

   
100- 170 Bildschirm vorbereiten, Dimensionierung
170- 300 Eingabe der Werte
270 Bilden der Summe der Eingabewerte für Kuchengrafik
280 Ermitteln des größten Elements der Eingabewerte
320 Beginn des Hauptprogramms
340 Faktor für Ausdehnung in x-Richtung
350 Faktor für Ausdehnung in y-Richtung
380- 430 Definieren der Variablen und Aufruf der Unterprogramme
450 Berechnen der Ausdehnungsfaktoren für die Vergrößerung
460- 600 Hauptmenü
620- 720 Definieren der Variablen und Aufruf des jeweiligen Unterprogramms
770- 860 Programmende oder Neustart
1000-1370 Unterprogramm: Balkengrafik
1020 Zeichnen der x-Achse
1040-1120 Berechnen der LINE-Koordinaten
1130-1150 Ziehen der Linien 1-3
1160-1320 Berechnen und Ziehen der 4.-7. Linie (z. T. verdeckte Linien)
1330 COLOR für FILL-Befehl
1340 Ausfüllen der Vorderseite der Säule
1360 COLOR-Befehl auf 'normal’ setzen (!)
1500-1580 Unterprogramm zum Beschriften von Balkengrafik und Diagramm
1510-1520 Y-Achse beschriften
1530-1570 Position berechnen und X-Achse beschriften
2000-2140 Unterprogramm: Diagramm
2010-2050 Achsen und Einteilungslinien ziehen
2060-2120 Koordinaten berechnen und Linien ziehen
3000-3100 Unterprogramm: Kuchengrafik
3010 Kreis ziehen
3020 Kreisbogenfaktor berechnen
3040-3050 Anfangs- und Endwinkel des Kreissektors berechnen
3060-3070 Kreissektor zeichnen und ausfüllen
3090 COLOR-Befehl zurücksetzen (!)
3500-3570 Unterprogramm zum Kennzeichnen der Kreissektoren
3520 COLOR-Befehl setzen
3530 Beschriftungskreise zeichnen und ausfüllen
3540 Position berechnen und beschriften

VARIABLENLISTE

   
wo Feld für Eingabewerte
E$ allgemeiner Eingabestring
A allgemeine Schleifenvariable
NR Anzahl der Eingabewerte
SU Summe aller Eingabewerte
YM größter y-Wert
XY Abstand zum nächsten Wert (x-Achse)
YA Vergrößerungsfaktor y-Achse
BX1.BX2.BY1 Koordinaten für x,y-Achse
XB Abstand der Säulen (!)
XB/2 Breite der Säule
YB Faktor für Lage der z-Achse
X1,X2,X3,X4 Koordinaten für Balken
Y1,Y2,Y3,Y4,Y5 (siehe Zeichnung)
DX1 ,DX2,D Y1 ,DYY Koordinaten für x,y-Achse
XI,Y 1,X2,Y2 Koordinaten für LINE-Befehl
CX1,CY1,R1 Koordinaten für Kreismittelpunkt und Radius
W1 Kreisbogenfaktor
WA,WE Anfangs- und Endwinkel
100 ’ GRAFIK V 1.0
110 ’ by mark
120 ’
130 programmstart :
140 CLEAR:DIM W(30)
150 A$=" M = MENUE B = BALKEN K = KUCHEN D - DIAGRAMM"
160 A$=A$+" --> ENDE"
170 COLOR 1,0,1: FULLW 2: CLEARW 2 : CLOSEW 3
180 GOTOXY 10,0:PRINT "GRAPHISCHE DARSTELLUNG"
190 GOTOXY 5,2: PRINT"... bitte die Werte eingeben ! ENDE = :*:"
200 GOTOXY 0,5:NR=0
210 ’------------------------------------------
220 eingabe :
230 WHILE E$<>"*" AND NR <18
240 NR=NR +1
250 PRINT " WERT ("NR ")= ";: INPUT E$
260 W(NR)=ABS( VAL(E$))
270 SU=SU+W(NR)
280 IF YM< W(NR) THEN YM=W(NR)
290 WEND
300 IF E$="*" THEN NR=NR-1
310 ’------------------------------------------
320 gesamtgrafik :
330 CLEARW 2
340 XA= INT (240/NR)
350 YA=100/YM
370 GOTOXY 5,1: PRINT"G R A F I K V 1.0"
380 BX1= 5:BX2=300:BY1=180
390 GOSUB balkengrafik
400 DX1=10:DX2=280:DY1=320:DYY=200
410 GOSUB diagramm
420 CX1 = 480:CY1 = 100: R1=80
430 GOSUB kuchengrafik
440 ’ ausdehnung
450 XA=2*XA:YA=1.8*YA
460 ’ menue
470 GOTOXY 25,13: PRINT "MENUE"
480 GOTOXY 25,15: PRINT "BALKENGRAFIK"
490 GOTOXY 25,16: PRINT "KUCHENGRAFIK"
500 GOTOXY 25,17: PRINT "DIAGRAMM"
510 GOTOXY 25,18: PRINT " ENDE"
520 ’-----------------------------------------------
530 menue :
540 E$=INPUT$(1)
550 IF E$="M" OR E$="m" THEN GOTO gesamtgrafik
560 IF E$="B" OR E$="b" THEN GOTO b
570 IF E$="K" OR E$="k" THEN GOTO k
580 IF E$="D" OR E$="d" THEN GOTO d
590 IF E$="E" OR E$="e" THEN GOTO ende
600 GOTO menue
610 ’
620 b: BX1=10:BX2=640:BY1=250
630 CLEARW 2
640 GOSUB balkengrafik : GOSUB beschriftung : GOTO auswahl 
650 '
660 k: CX1=200:CY1=155:R1=150
670 CLEARW 2
680 GOSUB kuchengrafik :GOSUB kuchenbeschriftung :GOTO auswahl 
690 '
700 d: DX1=20:DX2=560:DY1=250:DYY=10 
710 CLEARW 2
720 GOSUB diagramm : GOSUB beschriftung
730 '
740 auswahl :
750 GOTOXY 0,18: PRINT A$ : GOTO menue 
760 '
770 ende :
780 GOTOXY 5,5:PRINT"NEUE DATEN"
790 GOTOXY 5,7:PRINT" ------> ENDE"
800 '
810 menue1 :
820 E$=INPUT*il)
830 IF E$="N" OR E$="n" TUEN GOTO programmstart
840 IF E$="E" OR E$="e" THEN END
850 GOTO menue1 
860 END
870 ’ --------------------------
1000 balkengrafik :
1010 COLOR 1,1,1,0,1
1020 LINEF BX1,BY1,BX2,BY1
1030 FOR A=NR TO 1 STEP 1
1040 XB=XA: YB=4
1050 X1=A*XA
1060 X2=X1-XB/2
1070 X3=X1+XB
1080 X4=X1+XB/2
1090 Y1=BY1-W(A)*YA
1100 Y2=BY1-XA/YB
1110 Y3=Y1-XA/YB
1120 Y5=BY1-XB/(YBK2)
1130 LINEF X1,BY1,X1,Y1 : REM 1
1140 LINEF X2,BY1,X2,Y1 : REM 2
1150 LINEF X1,Y1,X2,Y1 : REM 3
1160 Y6=Y5-W(A)*YA: X44=X4
1170 IF W(A)*YA>=W( A+1 )*YA-XB/8 THEN X44=X3: Y6=Y3
1180 LINEF X1,Y1,X44,Y6 : REM 4
1190 LINEF X2,Y1,X2+XB,Y3 : REM 5
1200 IF Y3>BY1-W(A+1)*YA THEN GOTO noline
1210 X5=X4+4*(BY1-W(A+1)*YA-Y3)
1220 IF X5>X3 THEN X5=X3
1230 LINEF X4,Y3,X5,Y3 : REM 6
1240 noline: IF(A=NR) THEN X4=X3:Y5=Y2:GOTO line7
1250 Y5=BY1-XB/(YB*2)
1260 IF Y5<BY1-W(A+1)*YA THEN Y5=Y2: X4=X3
1270 line7: LINEF X1,BY1,X4,Y5 : REM 7
1280 IF (A=NR) THEN Y4=Y2 : GOTO lineS
1290 Y4=(BY1-(W(A+1)*YA))-XB/(YB*2)
1300 IF (Y4 >Y2) THEN Y4 = Y2
1310 IF (Y4<Y3) THEN Y4=Y3
1320 line8: LINEF X3,Y3,X3,Y4 : REM 8
1330 COLOR 1,1,1,A,2
1340 FILL X2+(X1-X2)/2,BY1-(BY1-Y1)/2,1
1350 NEXT A
1360 COLOR 1,0,1,0,1
1370 RETURN
1380 ’-----------------------------------------
1500 beschriftung :
1510 GOTOXY 0,3: PRINT YM 
1520 GOTOXY 0,9: PRINT YM/2 
1530 FOR A=NR TO 1 STEP 1 
1540 X=(A*XA-XB/2)/8
1550 IF A MOD 2 =0 THEN Y=16 ELSE Y=15 
1560 GOTOXY 0,Y :PRINT SPC(X) W(A)
1570 NEXT A 
1580 RETURN
1590 ’ ------------------------------------------
2000 diagramm :
2010 LINEF DX1,DY1,DX2,DY1
2020 LINEF DX2,DY1,DX2,DYY
2030 LINEF DX1,DY1,DX1,DYY
2040 LINEF DX1,DY1-YM*YA,DX2,DY1-YM*YA
2050 LINEF DX1,DY1-(YM/2)*YA,DX2,DY1-(YM/2)*YA
2060 FOR A=1 TO NR-1
2070 X1=(A*XA)-XA/4
2080 Y1=DY1-W(A)*YA
2090 X2= ((A+1)*XA)-XA/4
2100 Y2=DY1-W(A+1)*YA
2110 LINEF X1,Y1,X2,Y2
2120 NEXT A
2130 COLOR 1,0,1
2140 RETURN
2150 ’-----------------------------------------
3000 kuchengrafik:
3010 CIRCLE CX1,CY1,R1
3020 W1=3600/SU : WE=0
3030 FOR A=1 TO NR
3040 WA=WE
3050 WE=WE+W(A)*W1
3060 COLOR 1,1,1,A,2
3070 PCIRCLE CX1,CY1,RI,WA,WE
3080 NEXT A 
3090 COLOR 1,0,1 
3100 RETURN
3110 ' ----------------------------------
3500 kuchenbeschriftung :
3510 FOR A=1 TO NR 
3520 COLOR 1,1,1,A,2
3530 CIRCLE 500,A*(340/20)-5,8 : FILL 500,A*340/20-5
3540 GOTOXY 30,A-1: PRINT W(A)
3550 NEXT A
3560 COLOR 1,0,1
3570 RETURN
3580 ’ ---------------------------------------------


Aus: ST-Computer 01 / 1986, Seite 45

Links

Copyright-Bestimmungen: siehe Über diese Seite