2015-04-05 49 views
1

我正在玩d3.js,我遇到了一些奇怪的事情。在d3.js中改变y轴方向时丢失条纹

当我改变

var yScale = d3.scale.linear() 
     .domain([0, d3.max(data, function(d) { return d.Distance})]) 
     .range([0, h]) 

var yScale = d3.scale.linear() 
     .domain([0, d3.max(data, function(d) { return d.Distance})]) 
     .range([h, 0]) # CHANGED LINE 

得到轴在正确的方向来算,一个酒吧去失踪,其余棒的高度不再与值对应在轴上。

在这里看到一个jsfiddle

我检查的文件,我无法找到我在这里失踪。任何帮助将不胜感激。

回答

1

酒吧不会失踪。它只有0的高度(即您看不到它),因为您将域[0, 118377]中的最大值118377映射到范围([h, 0])中的0。

您可以通过右键单击图形并单击“检查元素”按钮来检查它。你会看到三个rect元素,最后一个元素将会有height="0"

我假设你想让y轴从与x轴相交的0开始。看看这个fork of your fiddle,我改变了属性计算为以下:

... 
.attr("y", function(d) { return yScale(d.Distance); }) 
.attr("height", function(d) { return h - yScale(d.Distance); }) 
+0

我看到我去拧有@Oleg,但是当我改变域[118377,0]的值我y轴翻转回来,所以它从上到下重新计数,而不是从下到上。 – commesan 2015-04-05 13:00:22

+0

@commesan我已经编辑了答案,通过添加一个链接到你的小提琴的叉子。基本上,如果反转范围,则需要相应地调整属性计算。 – Oleg 2015-04-05 13:06:24

+0

这个伎俩!谢谢@Oleg在我发现之前,我会失去几个小时。 – commesan 2015-04-05 13:09:14