1

我一直在做一个需要用价格结果填充条形图的项目。该图表显示给定价格范围内的商品数量。例如,如果亚马逊上有 9 件商品的价格范围在 0 美元到 10 美元之间,那么 x 轴将显示 0 美元到 10 美元,而 y 轴将填充值 9。

我的条形图有 8 个条形图,均具有相似的价格范围。0-10 美元、10-20 美元、20-30 美元……等等。

我的问题是:定义这些点的最佳方法是什么?这些项目之间没有共同的价格范围,因此x 轴不能是静态数字。它们必须在结果范围内动态计算。

因此,目前我正在创建 x 轴点,如下所示:

我取最低的结果: @numbers[0] = results[0];

我拿了最高的结果: @numbers[8] = results[-1];

然后我找到两者的中位数: @numbers[4] = (@numbers[0]+@numbers[8])/2;

然后我再重复这个过程 6 次

@numbers[2] = (@numbers[0]+@numbers[4])/2; @numbers[6] = (@numbers[4]+@numbers[8])/2; @numbers[1] = (@numbers[0]+@numbers[2])/2; @numbers[3] = (@numbers[2]+@numbers[4])/2; @numbers[5] = (@numbers[4]+@numbers[6])/2; @numbers[7] = (@numbers[6]+@numbers[8])/2;

这给了我我需要的结果,但它似乎非常重复,我想有更好的方法。

我尝试创建一个循环,但我无法以一种不那么冗长的方式编写它。

有没有更快的方法来做到这一点,或者可能是更符合 DRY 的方法?

4

1 回答 1

0

您的垃圾箱总是大小相同吗?在您的示例中,所有共享范围=10。如果是这样,那么你可以这样做:

binspacing = overall range / (numberofbins-1);

并且 bin n 的位置将是 numbers[0] 的 x 轴位置加上 n 乘以 binspacing。

于 2009-08-28T21:51:57.840 回答