Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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中的新数据集更新和绘制堆叠条形图_Javascript_D3.js - Fatal编程技术网

Javascript 如何使用D3中的新数据集更新和绘制堆叠条形图

Javascript 如何使用D3中的新数据集更新和绘制堆叠条形图,javascript,d3.js,Javascript,D3.js,新来的。我正在使用D3,基本上我有两个数组形式的数据集。我想要实现的是,单击按钮后,新数据集将覆盖旧数据集(我已经实现了这么多),然后绑定新数据集并重新绘制堆叠条形图。这不是我的事。当按下按钮时,它只会删除几个条 如果有任何提示,我将不胜感激。我觉得这很尴尬,因为我使用的是堆叠条形图,而不是普通条形图。 谢谢!:) 您只需使用更新的数据集重新设置g、rect、缩放和布局。这是一个帮助你的方法。再见,伙计,谢谢,但是这个链接不起作用。你确定是那个吗?等等,我想是网站总体上出了问题。希望它能很快恢

新来的。我正在使用D3,基本上我有两个数组形式的数据集。我想要实现的是,单击按钮后,新数据集将覆盖旧数据集(我已经实现了这么多),然后绑定新数据集并重新绘制堆叠条形图。这不是我的事。当按下按钮时,它只会删除几个条

如果有任何提示,我将不胜感激。我觉得这很尴尬,因为我使用的是堆叠条形图,而不是普通条形图。 谢谢!:)


您只需使用更新的数据集重新设置
g
rect
、缩放和布局。这是一个帮助你的方法。再见,伙计,谢谢,但是这个链接不起作用。你确定是那个吗?等等,我想是网站总体上出了问题。希望它能很快恢复。我可以利用所有我能得到的代码方面的帮助。我还是不明白你说的话该怎么办。再次感谢你。是的,成功了!!非常感谢。你帮我省了几个小时。我可能很快会带着更多的问题回来,但非常感谢。:)您只需使用更新的数据集重新设置
g
rect
、缩放和布局。这是一个帮助你的方法。再见,伙计,谢谢,但是这个链接不起作用。你确定是那个吗?等等,我想是网站总体上出了问题。希望它能很快恢复。我可以利用所有我能得到的代码方面的帮助。我还是不明白你说的话该怎么办。再次感谢你。是的,成功了!!非常感谢。你帮我省了几个小时。我可能很快会带着更多的问题回来,但非常感谢。:)您只需使用更新的数据集重新设置
g
rect
、缩放和布局。这是一个帮助你的方法。再见,伙计,谢谢,但是这个链接不起作用。你确定是那个吗?等等,我想是网站总体上出了问题。希望它能很快恢复。我可以利用所有我能得到的代码方面的帮助。我还是不明白你说的话该怎么办。再次感谢你。是的,成功了!!非常感谢。你帮我省了几个小时。我可能很快会带着更多的问题回来,但非常感谢。:)
         var yAxis = d3.svg.axis() 
                .scale(yScale)
                  .orient("left")
                //  .ticks(5);

        //Width and height
        var w = 600;
        var h = 300;
        var barPadding = 50;



        //Original data
        var dataset = [
            [
                { y: 20 },   //male 
                { y: 4 },
                { y: 16},
                { y: 53},
                { y: 15 }
            ],
            [
                { y: 12 },   //female
                {  y: 4 },
                {  y: 3 },
                {  y: 36 },
                {  y: 2 }
            ],

        ];
        console.log(dataset);





     //    var myDataSet = dataset; 

    //    var totalDeaths = d.y0 + d.y1;

        //Set up stack method
        var stack = d3.layout.stack();

        //Data, stacked
        stack(dataset);

        //Set up scales
        var xScale = d3.scale.ordinal()
            .domain(d3.range(dataset[0].length))
            .rangeRoundBands([0, w], 0.05);

        var yScale = d3.scale.linear()
            .domain([0,             
                d3.max(dataset, function(d) {
                    return d3.max(d, function(d) {
                        return d.y0 + d.y;
                    });
                })
            ])
            .range([0, h]);

        //Easy colors accessible via a 10-step ordinal scale
    //  var colors = d3.scale.category20c();

        var color = d3.scale.ordinal()
  .domain(["Male", "Female"])
  .range(["#00B2EE", "#FF69B4"]);




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

        // Add a group for each row of data
        var groups = svg.selectAll("g")
            .data(dataset)
            .enter()
            .append("g")
            .style("fill", function(d, i) {
                return color(i);
            });



        // Add a rect for each data value
        var rects = groups.selectAll("rect")
            .data(function(d) { return d; })
            .enter()
            .append("rect")
            .attr("x", function(d, i) {
                return xScale(i);
            })

        .on("mouseover", function(d) {

                //Get this bar's x/y values, then augment for the tooltip
                var xPosition = parseFloat(d3.select(this).attr("x")) + xScale.rangeBand() / 2;
                var yPosition = parseFloat(d3.select(this).attr("y")) + 14;

                //Create the tooltip label
                svg.append("text")
                   .attr("id", "tooltip")
                   .attr("x", xPosition)
                   .attr("y", yPosition)
                   .attr("text-anchor", "middle")
                   .attr("font-family", "sans-serif")
                   .attr("font-size", "11px")
                   .attr("font-weight", "bold")
                   .attr("fill", "black")
                   .html("Female deaths: " + d.y + "\n" + "              \nMale deaths: " + d.y0);

           })
           .on("mouseout", function() {

                //Remove the tooltip
                d3.select("#tooltip").remove();

                })



            .attr("width", xScale.rangeBand())


           .attr("y", function(d) {
                return h - yScale(d.y0) - yScale(d.y) ;
           })

           .attr("height", function(d) {
                return yScale(d.y);
           });




          d3.select("#target")
            .on("click", function() {       //event listener on button click
   //   alert("heeeey");





                //New values for dataset
            dataset =   [
            [
                { y: 100 },   //male 
                { y: 20 },
                { y: 16},
                { y: 53},
                { y: 15 }
            ],
            [
                { y: 5 },   //female
                {  y: 4 },
                {  y: 3 },
                {  y: 36 },
                {  y: 2 }
            ],

        ]; 

              console.log(dataset);



        //Data, stacked
    //  stack(dataset);



                //Update all rects
        var gas = svg.selectAll("rect")


               .data(dataset)

               //  .transition()
             //   .duration(1000)
            //    .ease("cubic-in-out")
                .attr("width", xScale.rangeBand())


           .attr("y", function(d) {
                return h - yScale(d.y0) - yScale(d.y) ;
           })

           .attr("height", function(d) {
                return yScale(d.y);
           })


              .attr("x", function(d, i) {
                return xScale(i);
            });
          });