在JS中对柱状图进行类值计数的最佳方法是什么
What is the best way to count like-values in JS for a Histogram?
我正在尝试创建随机生成数据的直方图,所以目前我正在做以下工作:
假设创建了以下数组:
returns = [0.0024, 0.0231, 0.014, 0.0005, -0.008]
我使用浏览阵列
returnsRounded[x] = Math.round(returns[x] * 1000) / 1000;
这将返回我:
returnsRounded = [0.002, 0.023, 0.014, 0.001, -0.008]
现在我正试图计算每个特定值的数量(在一个由数万个值组成的数组中),所以我会非常低效地做类似于的事情
switch (returnsRounded) {
case -0.040:
arr[1]++;
break;
case -0.038:
arr[2]++;
break;
// ... and so on.
}
然后将计数值插入我的直方图(它的工作原理就像条形图——从某种意义上说,它只比较计数。我不能只插入一个数组就得到直方图。
那么,有没有比我现在做的更快或更漂亮的更有效的方法来计算数组中四舍五入数的出现次数呢?
谢谢!
编辑:我想出了一个比现在更好的方法,尽管我不知道它是否仍然很棒。这是一把小提琴:
http://jsfiddle.net/brockwhittaker/bLu4s8sc/
它们计数频率的关键是对数组的元素进行装箱:
function frequencies(values, binsize) {
var mapped = values.map(function(val) {
return Math.ceil(val / binsize) -1;
});
return mapped.reduce(function (freqs, val, i) {
var bin = (binsize * val);
freqs[bin] = freqs[bin] ? freqs[bin] + 1 : 1;
return freqs;
}, {});
}
函数frequencies
创建一个字典(对象),其中每个键/值对都是bin/count,例如:
Object { 0: 60, 1: 43, 2: 11, -0.2: 68, -2: 11, -2.2: 10, -2.4000000000000004: 4, -2.6: 5, -2.8000000000000003: 1, -3: 1, 18 more… }
这个jsfiddle 中提供了一个带有简单直方图的完整样本
相关文章:
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- 在ng重复循环中显示条件内容的最佳方式是什么
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 在node.js中编写单元测试的最佳方式是什么
- 使用AJAX在Rails中提交动态表单的最佳方式是什么
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 列出没有 mysql 的元素的最佳方法是什么
- 在AngularJS中使用多个主题的最佳方式是什么
- 存储数据的最佳方式是什么,以便与jquery一起使用
- 在企业应用程序框架中包含js/css文件的最佳实践是什么
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 用JavaScript随机给网页上的每个字母上色的最佳方式是什么
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- JavaScript - 创建可链接函数时的最佳方法是什么
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 将JavaScript检测与MVC4显示模式集成的最佳方式是什么
- addEvent()传奇事件之后的当前最佳实践是什么