2014-10-01 118 views
2

我被困在这一张,我需要另一双眼睛来帮助我看看我失踪了。我有一个bl.ock在这里:d3.js堆叠条形图不能沿x轴绘制?

http://bl.ocks.org/hepplerj/c419baa3abf7363cd2d5

正如你所看到的,几个rect元素不沿x轴绘制正确。任何关于我忽略的指针?非常感激!

+0

有人由于某种原因downvoted我的评论。问题是height_scale变量。范围反转。所以SVG从最左上角开始绘制。 – 2014-10-02 03:57:27

+0

@Incodeveritas,你的回答对我来说似乎是一个很好的答案。我不明白为什么它是downvoted。需要付出一些努力才能应用您的答案(在几次快速尝试后我没有成功),但无论谁低估了它,至少应该有礼貌地解释您的答案出了什么问题。 – Mars 2014-10-02 04:02:09

+0

但我认为它更复杂。 'height_scale'分别影响每一个酒吧的一块。 – Mars 2014-10-02 04:14:54

回答

2

你的代码只是一个小问题。首先,这是一个小提琴,它和你的bl.ock一样:http://jsfiddle.net/gp2ex7fw/

查看源代码并计算<g class="bar">元素,你会看到只有7个元素,而你有8个晶粒的数据。完全缺失millet/sorghum groats。这会在每个小节中产生间隙,导致小节未填满整个高度。

这是因为你的代码的以下部分:

d3.select("svg").selectAll("g") 
    .data(stackLayout(stackData)) 
    .enter() 
    .append("g") 
    .attr("class", "bar") 

当你做selectAll("g"),你也选择第一g元素(用于转化),这是连接到您的svg元素前面。

修复非常简单。只要改变上面的代码:

d3.select("svg").selectAll(".bar") 
    .data(stackLayout(stackData)) 
    .enter() 
    .append("g") 
    .attr("class", "bar") 

现在我们只选择g元素与class="bar"且没有遗漏任何数据。这里有一个工作小提琴:http://jsfiddle.net/gp2ex7fw/1/

+0

谢谢,@OrionMelt!这解决了它 - 并感谢有用的解释。 – 2014-10-03 02:38:45