2010-10-01 100 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 

这只是走在页面上,每个仓,并在每个级别的打印或者" ""#"为每列使用的列。直方图打印部分非常简单。所有的复杂性都来自管理轴和标签。