在deeple.js中处理大型数据集以渲染图表
Handling large datasets in dimple.js to render a chart
我想用小酒窝.js为大型数据集绘制图表。我的代码运行得非常好。但唯一的问题是,图表需要超过45秒才能出现。我正在我的代码中寻找某种优化,以减少绘制图表所需的时间。以下是我的区域图代码:
var dataset = [];
// The arrays xpoints and ypoints are populated dynamically
// with hundreds of thousands of points
var xpoints = chartData["xdata"];
var ypoints = chartData["ydata"];
var area1;
var svg = dimple.newSvg("#" + mychart, 700, 600);
var x, y;
for (var i = 0; i < xpoints.length; i++)
dataset.push({
x : xpoints[i],
y1 : parseFloat(ypoints[i])
});
var myChart = new dimple.chart(svg, dataset);
myChart.setBounds(75, 30, 480, 330);
y = myChart.addMeasureAxis("y", "y1");
x = myChart.addCategoryAxis("x", "x");
area1 = myChart.addSeries("First", dimple.plot.area, [ x, y ]);
var l = myChart.addLegend(65, 10, 510, 20, "right");
myChart.draw(1500);
是否有一些方法可以在deplet.js本身或使用d3.js来优化此代码?
恐怕Dimple对数十万点的表现不是很好。它的绘图逻辑是为灵活性而构建的,对于这种情况,你需要编写特定的d3代码(把Dimple想象成瑞士军刀,但这里你需要一把手术刀(。即使使用原始d3,您也可能会遇到包含该数量点的路径问题。当然可以尝试原始d3,但您可能需要编写一些更复杂的附加逻辑来平均每n个点,然后在缩放时填充细节。还要记住,即使使用了完美的客户端代码,只要从服务器获取大量数据,也会经历明显的等待。
我找到了一个解决方案!!。我坚持使用小酒窝.js本身,而不是原始d3。
我所做的是首先聚合这些值,然后将它们传递给chart.draw()
函数
现在渲染图形所需的时间从40秒减少到12秒,这要好得多。
目前,我的聚合函数只是对特定类别的值进行汇总。draw((函数中的实现可能有点复杂,因此需要额外的时间。CCD_ 2和CCD_。
早些时候,我刚刚做了这个:
dataset.push({
x : xpoints[i],
y1 : parseFloat(ypoints[i])
});
现在,我首先应用如下聚合:
var isPresent = false;
for (var j = 0; j < unique_x.length; j++) {
if (xpoints[i] == unique_x[j]) {
y_val = parseFloat(ypoints[i]);
if (isNaN(y_val)) {
y_val = 0;
}
y_sum[j] = y_sum[j] + y_val;
isPresent = true;
break;
}
}
if (isPresent == false) {
unique_x.push(xpoints[i]);
y_sum.push(parseFloat(ypoints[i]));
}
然后,我这样做:
for (var i = 0; i < unique_x.length; i++) {
dataset.push({
x : unique_x[i],
y1 : y_sum[i]
});
相关文章:
- 具有大型数据集的组件仅在 IE11/Edge 上运行缓慢
- javascript中网络图表的大型数据集
- 具有交叉滤波器的D3变成非常慢的大型数据集
- 事件发射器与在 AngularJs 中更新大型数据集时的$watch
- redux 和不可变数据结构如何处理大型数据集
- 查询大型 PouchDB 数据集的最高性能范围方式
- 是否有一个好的图表 API,可以在滚动/缩放时使用 Ajax 延迟加载大型数据集
- 搜索大型多嵌套 JSON 数据集的最有效方法
- 大型数据集的高图表折线图工具提示问题
- 检索要在多个控制器之间共享的大型数据集
- 在我的服务工厂中,我查找了一个大型数据集——我想持久化它,并检查它的存在,以避免再次调用它
- 将大型数据集绑定到JQuery控件
- 在具有大型数据集的HighStock时间序列中设置附加点属性
- 在Highcharts中加载几个大型数据集
- 大型数据集可视化
- 如何使用React D3快速绘制大型数据集的工具提示
- 迭代大型数据集的Excel VBA与Javascript性能
- 在deeple.js中处理大型数据集以渲染图表
- 用于大型数据集的javascript/html5图表库
- 在大型(1000)数据集上取消选中复选框时,Knockout速度较慢