D3.js堆积条形图向负方向发展

问题描述 投票:1回答:2

我是D3和javascripts的新手。我正在尝试构建一个动画垂直堆积条形图。我找到了一个用于水平堆积条形图的here示例。在调整之后,我得到了一个垂直堆积的条形图,然而,向下增长。这是my edited fiddle

更新:在做了几个调整之后,包括下面建议的那些,这终于有效:final working upward growing stacked bar chart我觉得我需要改变的地方应该在这个代码块内

rects = groups.selectAll('.stackedBar')
        .data(function(d,i) {console.log("data", d,i); return d; })
        .enter()
        .append('rect').attr('class','stackedBar')
        .attr('y', function(d) { return yScale(d.y0); })
        .attr('x', function(d, i) {return xScale(d.x); })
        .attr('height',0)
        .attr('width', xScale.rangeBand());

        console.log(document.querySelectorAll(".stacked"));
        var abc=document.querySelectorAll(".stackedBar");

     rects
        .transition()
        .delay(function(d,i,j){console.log("pre",j); return j*500;})
        .attr("y", function(d) { return yScale(d.y0); })
        .attr("height", function(d) { return yScale(d.y); } )
        .duration(1000);

但是我四处搜索并试图恢复yScale范围,y的初始位置,并且没有一个工作。我也注意到无论如何,我的yAxis总是低于我的X轴。

javascript d3.js stacked-chart stackedbarseries
2个回答
1
投票

首先,您必须更改y比例的方向:

yScale = d3.scale.linear().domain([0,yMax]).range([height,0])

并且必须转换x轴,因此它从“高度”开始。在svg中,top有height = 0,所以svg的底部等于“height”:

svg.append('g')
   .attr('class', 'axis')
   .call(xAxis)
   .attr("transform", "translate(0," + height + ")");

最后但同样重要的是,您必须更改堆积条形图的建筑方向,如:

rects
   .transition()
   .delay(function(d,i,j){console.log("pre",j); return j*500;})
   .attr("y", function(d) { return yScale(d.y + d.y0); })
   .attr("height", function (d) { return yScale(d.y0) - yScale(d.y + d.y0); } )
   .duration(1000);

这是一个更新的fiddle


1
投票

SVG从左上角开始,因此指定的“高度”表示页面的高度,因此有些内容与您期望的相反。

首先从你的y尺度开始:范围需要以相反的顺序(高度,0)而不是(0,高度)进行映射。

yScale = d3.scale.linear().domain([0,yMax]).range([height,0]),1

同样,需要将x轴转换为从“高度”开始。

        svg.append('g')
        .attr('class', 'axis')
        .call(xAxis)
        .attr("transform", "translate(0," + height + ")");'
© www.soinside.com 2019 - 2024. All rights reserved.