2011-10-07 1 views
0

Je veux mettre des valeurs en ordonnée dans l'histogramme que j'ai fait. Je veux toutes les 100 valeurs par exemple pour mettre "100- |" "200- |" etc. Mon code est:python - comment mettre des valeurs dans un histogramme de longueur de mot

def histogram(lenghts): 
    xmax=max(lengths.keys()) 
    ymax=max(lenght.values()) 
    symbol="" 
    indexing="" 

    for j in range(ymax,-1,-10): 
      symbol="{0}".format("|") 
     for v in range(ymax,-1,-100):#here i try to put the values 
      print("{0}{1:<4}".format(v,"-|")) 

    #fill histogram 
     for i in range(1,xmax): 
      if i in lengths.keys() and lengths[i]>=j: 
       symbol+="***" 
      else: 
       symbol+=" " 
     print(symbol) 

    #x-axis 
    symbol="{:>5}".format("-+-") 
    for i in range(1,xmax): 
     symbol+="+--" 
    print(symbol) 

    #indexing x-axis 
    for i in range(1,xmax): 
     indexing+="{:>6}".format(i) 
    print(indexing) 

    return 

Je reçois des valeurs, mais seulement les mêmes valeurs, par exemple "67- |, 167- |, 267- |". Je n'arrive pas à comprendre comment le faire correctement!

+1

vous construisez une chaîne, mais vous ne faites rien avec elle. Si vous insérez une déclaration d'impression, vous voyez ce qui se passe! – rocksportrocker

+0

Il n'a pas besoin d'une déclaration d'impression. Mais avec l'impression, il n'imprime rien. – George

+0

Désolé, il faut imprimer, mais toujours rien – George

Répondre

1

Ici vous avez un code fonctionnel. L'astuce est dans l'opérateur de module qui est utilisé pour dessiner le numéro d'échelle de l'axe y lorsque l'axe y est un nombre proche de cent. Il y avait quelques autres problèmes mineurs dans votre code avec les noms de variables.

def histogram(lenghts): 
    xmax = max(lenghts.keys()) 
    ymax = max(lenghts.values()) 
    symbol = "" 
    indexing = "" 

    step = 10 
    for j in range(ymax, -1, -step): 
     if j % 100 < step: 
      symbol = "{0:>3}{1:>3}".format(j, "-|") 
     else: 
      symbol = "{0:>3}{1:>3}".format(" ", "|") 

     #fill histogram 
     for i in range(1, xmax+1): 
      if i in lenghts.keys() and lenghts[i] >= j: 
       symbol += "***" 
      else: 
       symbol += " " 
     print(symbol) 

    #x-axis 
    symbol= "{0:>8}".format("-+--") 
    for i in range(1, xmax+1): 
     symbol += "+--" 
    print(symbol) 

    #indexing x-axis 
    indexing = " " 
    for i in range(1, xmax+1): 
     indexing += "{0:>3}".format(i) 
    print(indexing) 


lenghts = {4:104, 6:257, 10:157} 
histogram(lenghts) 

enter image description here

+0

: Merci, je suis proche.Comment puis-je mettre le numéro d'incrément (100,200 ..) tous les 5 "|". Et pourquoi ça commence à partir de 7? – George

+0

Parce que vous dessinez en utilisant ymax comme plage de départ et en vous déplaçant tous les dix. Comme ymax est 257 (mes chiffres), il commence à partir de là: 257-247-237-etc. Avec ce type de dessin, vous ne pouvez pas obtenir une précision d'unité, donc vous pouvez arrondir les nombres de l'axe y: 107 -> 100. Actuellement, la position de 107 est seulement plus ou moins 107 avec une erreur de 10 .... votez et jouez avec. C'est à votre tour d'apprendre – joaquin

+0

Ok, mais je vous ai dit parce que si j'essaye (ymax, 0, -5) il n'a pas un pas de 5 "|" .Il messes.Merci pour votre aide – George

Questions connexes