[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