D3在X轴上缩放
问题描述:
我正在尝试将缩放功能添加到我的条形图中。我想要实现的是,当用户将光标拖到某个区域时,您应该可以放大该区域,并且x轴值将更改为显示该月的天数。 正在关注this example我试图合并相同的缩放和拖动功能。D3在X轴上缩放
但我似乎得到这个错误:
Error: <rect> attribute transform: Expected number, "translate(NaN,0)".
我试图变焦功能做一次放大x轴应该显示月变化(一月,二月,等等)到天(1月1日,1月2日,1月3日等)。 任何帮助将被附上。 下面是变焦功能的代码:
function bListener() {
x.domain(brush.empty() ? x.domain() : brush.extent());
svg.selectAll(".bar")
.attr("transform", function(d) { console.log(d.date); return "translate(" + x(d.date) + ",0)"; });
svg.select(".x axis").call(xAxis);
}
答
您的x
函数期望传递一个数字,以便d3可以使用它。
当前你传递一个字符串。 d.date
在这种情况下是字符串"2013-03-21"
。
您需要将其格式化为一个数字,以便x
可以为translate
函数返回一个数字。
在这种情况下使用x(new Date(d.date))
svg.selectAll(".bar").attr("transform", function(d) {
console.log(d.date);
return "translate(" + x(new Date(d.date)) + ",0)";
});
感谢您的响应改变成
date object
。我改变了数据对象,但我的x轴似乎没有更新。任何想法如何解决这个问题? http://jsfiddle.net/noobiecode/dty0s24k/35/ – user3837019您的xAxis函数使用月份绘制刻度 - '.orient('bottom') .ticks(d3.time.month) .tickFormat(d3.time.format ('%b%y'))'。简单地称呼它就像你一样,不会改变蜱虫,因为你不会改变任何东西。你应该看看d3上的一些教程 - 开始并建立一个图表,而不是跳入最终产品。它从长远来看有所作为。 – Craicerjack
我看了一下创建xAxis的位置,注意到了绘图和格式。打算回到这里发布它,但你打败了我。至于“跳入和最终产品”。我确实使用教程创建了图表。我承认我对D3不太了解。 – user3837019