2011-10-07 30 views
0

我想把值在我的直方圖中的y軸。 我想每100個值例如把「100-」 ,「200- |」等 我的代碼是:蟒蛇 - 如何把值的字長度直方圖

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 

我得到的值,但只有相同的值,例如 「67- |,167-174 |,267- |」。 我無法確定如何做到這一點!

+1

你正在構建一個字符串,但你什麼都不做吧。如果你插入一個打印語句,你會看到發生了什麼! – rocksportrocker

+0

它不需要打印語句。但打印時也不打印任何東西。 – George

+0

對不起,它需要打印,但什麼也沒有 – George

回答

1

在這裏你有一個工作代碼。技巧是在模塊運算符中,當y軸的數字接近一百時,用於繪製y軸的刻度數。 你的代碼中有一些其他的小問題與變量名稱。

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

:謝謝!我很接近。我怎樣才能把增量數(100,200 ..)每5個「|」。爲什麼它從7開始? – George

+0

因爲您正在使用ymax作爲起始範圍並每十移動一次。由於ymax是257(我的數字),它從那裏開始:257-247-237等。有了這種繪圖,你不能得到1單位的精度,所以你可以繞Y軸數字:107 - > 100.目前107的位置只是或多或少的107,錯誤10 ....所以..投票並玩它。輪到你學習 – joaquin

+0

好的,但我告訴過你,因爲如果我嘗試(ymax,0,-5)它沒有5「|」的步驟。它會發生混亂。謝謝你的幫助 – George