Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将d3.js SVG移植到HTML5画布?_Javascript_Html_Canvas_D3.js_Svg - Fatal编程技术网

Javascript 将d3.js SVG移植到HTML5画布?

Javascript 将d3.js SVG移植到HTML5画布?,javascript,html,canvas,d3.js,svg,Javascript,Html,Canvas,D3.js,Svg,两天前,我打开了一个问题(),用d3快速绘制了很多元素(50k)。有了这些,我发现d3对于我的需要来说太慢了,需要一些完全不同的或者其他的方法 要绘制的数据是画布的15倍,我已经看到了。因此,似乎可以将d3移动到画布上。但是我不知道如何重写我的代码来使用Canvas dataset = data; var stack = d3.layout.stack(); stack(dataset); var x= d3.scale.ordinal() .domain(d3.range(

两天前,我打开了一个问题(),用d3快速绘制了很多元素(50k)。有了这些,我发现d3对于我的需要来说太慢了,需要一些完全不同的或者其他的方法

要绘制的数据是画布的15倍,我已经看到了。因此,似乎可以将d3移动到画布上。但是我不知道如何重写我的代码来使用Canvas

 dataset = data;
var stack = d3.layout.stack();
stack(dataset);

var x= d3.scale.ordinal()
        .domain(d3.range(dataset[0].length))
        .rangeRoundBands([0, w]);

var y= d3.scale.linear()
        .domain([0, 1])
        .range([0, h]);

var svg = d3.select("body")
        .append("svg")
        .attr("width", w)
        .attr("height", h);

var groups = svg.selectAll("g")
                .data(dataset)
                .enter()
                .append("g");

var rects = groups.selectAll("rect")
                .data(function (d) {
                    return d;
                })
                .enter()
                .append("rect")
                .attr("x", function (d, i) {
                    return x(i);
                })
                .attr("y", function (d) {
                    return y(d.y0 + d.y);
                })
                .attr("height", function (d) {
                    return h - y(d.y0);
                })
                .attr("width", x.rangeBand())
                .attr("fill", function (d, i) {
                    return color(i);
                });

如何将其更改为画布使用?有没有介绍如何做的教程?或者其他库更适合这种用法?

这里是一个很好的示例,使用画布绘制和D3在打开的图层地图顶部显示覆盖。对于大量对象,Canvas显示出比SVG更好的性能。用500000行测试


有一些画布图表库可以基于JSON数据绘制条形图,但基本的画布条形图非常容易编码。下面是一个不到20行的函数条形图:Elijah Meeks的书D3.js in Action是这个主题的一个很好的来源。画布材料将在后面的一章中介绍。