生成指数增加范围以使图表看起来很好

时间:2018-03-13 05:00:27

标签: python charts

我想知道如何生成一组增加的条形图步骤,以便从非常小的步骤开始,然后增加到最大值。我有一个响应时间的直方图,它紧密地围绕平均值进行分组,然后通常具有10 x平均值的长尾。该图表将有20个步骤,前10个步骤很小,然后逐渐增加,直到达到最大值。什么纯蟒蛇公式可以实现这个目标?

图表小例子:Min = 0,max = 5,average = 0.032

0.00 **
0.01 ***
0.02 ****
0.03 *************
0.05 ******
0.08 ****
0.12 ***
0.30 **
1.20 *
2.00 *
3.20 *
5.00 *

1 个答案:

答案 0 :(得分:0)

这是我的hacky代码来解决我的问题。欢迎改进。它从最大值开始,然后每个直方图图表桶减半,直到达到平均值的3倍。然后图表桶是剩余值范围的偶数部分,直到零。

    # histogram 0 - max
    bin_size = 20
    bin_values = [0 for _ in range(bin_size+1)]

    bin_max = 150
    average = 0.236

    bin_step = bin_max
    bin_factor = 0.5
    average_step_passed = False
    for x in range(bin_size, 0, -1):
        # print x, bin_step, bin_factor
        bin_values[x] = bin_step
        if not average_step_passed:
            if average * 3 > bin_step:
                bin_values[x] = average * 3
                bin_factor = bin_step / x
                average_step_passed = True
            else:
                bin_step = bin_step * bin_factor
        else:
            bin_values[x] = bin_factor * x

    bin_values[0] = 0

这使得直方图如下(粗略地):

samples: 69328
average: 0.2607
max: 100.34

Distribution
000.000      0
000.060    696 ***
000.120   7275 *************************************
000.180  26811 **********************************************************
000.240  22364 ***************************************************
000.300   5766 *************************
000.360   2113 ********
000.420   1381 *****
000.480   1149 ***
000.540    513 **
000.600    326 *
000.660    255 *
000.720    245 *
000.820    616 ***
001.570     37
003.140     24
006.270     15
012.540      9
025.080      1
050.170      1