2010-10-01 203 views
1

如何在2個數組中繪製c中的直方圖?如何在c中繪製直方圖

+0

您是否期望使用漂亮的圖形或只是一些****樣式文本? – djna 2010-10-01 06:32:58

+0

小樣**,沒什麼奇特的 – 2010-10-01 06:33:48

+1

在[頻率直方圖在C]中很不錯的複製(http://stackoverflow.com/questions/1413644/);唯一的區別是數據的性質。不太重要的一點是,你可以在[Code golf:Word frequency chart](http://stackoverflow.com/questions/3169051/)中找到幾種語言的直方圖輸出實現,但*不會*使用它們,因爲它們是:代碼高爾夫解決方案通常打破各種良好的編碼標準,以求簡潔。 – dmckee 2010-10-01 06:58:25

回答

0

您可以使用該

+1

和ncurses庫。 – Raveline 2010-10-01 06:53:17

1

ASCII藝術對於一個直方圖在其一側奠定了...

我建議使用每個增量的printf( 「*」),和printf( 「\ n」 )開始輸出新行。 (改變方向是讀者的練習)。

1

思考這個問題有點我不相信我在評論中發現的「重複」是真正的反應。所以我會說幾句話。

如果您已經完成了ASCII藝術方法,那麼您只有一個決定:垂直或水平條。水平很簡單:只需決定縮放比例,然後爲每個垃圾箱打印bin_contents*scale符號。代碼 - 高爾夫鏈接真的很有用,作爲什麼做模型,即使不是一個很好的例子如何來寫它。

但是,許多領域都希望在直方圖的展示中使用垂直條。這是一個有點困難,但考慮到僞

sacle = find_scale(input_array) 
max_height = find_max(input_array) * scale 
for (i=max_height; i>=0; i--) 
    if (some condition) 
     print_in_N_digits(round(i/scale)) // to label the scale 
    else 
     print_in_N_digits()    // lines with no labels 
    print " |"       // set up the vertical axis 
    for (j=first_bin to lat_bin) 
     if (input[j]*scale >= i) 
     print("#") 
     else 
     print(" ") 
     print_new_line 
print_in_N_digits(0) 
print(" +") 
for (j=first_bin to last_bin) 
    print("-") 
print_new_line 
print_in_N_digits() 
print(" 0") 
for (j=first_bin to last_bin) 
    if (some other condition) 
     print_bin_label 

這只是走在頁面上,每個倉,並在每個級別的打印或者" ""#"爲每列使用的列。直方圖打印部分非常簡單。所有的複雜性都來自管理軸和標籤。