[Python-de] "Statistik" graphisch in ASCII darstellen
Frank Immich
frankimmich at gmx.de
Mon Jul 26 15:24:13 CEST 2004
Hallo zusammen,
ich habe mir eine kleines Script gebastelt welches mir
eine "Kurve" ausgehend von einer Liste darstellt.
Luecken interpoliere ich.
Bsp:
l=[1,3,3,6,6,5,4,2,1,1]
Ergebnis:
+
|
| ..
| . .
| . .
| .. .
| . .
|. .
|
+----------------+
jetzt hätte ich gerne das nicht Interpoliert wird, sondern
bei einem Sprung der x-wert beibehalten wird...:
also so..
+
|
| ..
| . .
| . .
| .. .
| . .
|. ..
|
+-------------+
leider fehlt mir hier die Idee wie ich das in mein Script einbauen
kann...wahrscheinlich muss es völlig neu aufgebaut werden ?!
Kann mir jemand einen Tip geben ?
Vielen Dank für eure Hilfe...
Grüße Frank
#!/usr/local/bin/python
l=[1,3,3,6,6,5,4,2,1,1]
ln=[]
# Luecken in l fuellen
for c in xrange(len(l)-1):
if l[c+1]-l[c] >1:
ln+=range(int(l[c]),int(l[c+1]))
c+=1
elif l[c+1]-l[c] < -1:
ln+=range(int(l[c]),int(l[c+1]),-1)
c+=1
else:ln.append(l[c])
print ln
l=ln
# dic mit wert und position bilden
d=dict([(x,[]) for x in xrange(max(l)+1)])
[d[l[x]].append(x) for x in xrange(len(l))]
r="+\n|\n"
i=d.keys()
i.reverse()
# ueber dic interieren und zeilen sammeln
# mit "." an jeder position
for c in i:
rl="|"
pos=d[c]
for x in xrange(len(l)):
if x in pos:rl+="."
else:rl+=" "
r+=rl+"\n"
r+="+"+"-"*(len(l)+3)+"+"
print r
--
250 MB Mailbox, 100 FreeSMS/Monat, 1000 MB Online-Festplatte
Jetzt GMX TopMail kostenlos testen http://www.gmx.net/de/go/topmail