我有一个区域图(请参阅js小提琴https://jsfiddle.net/o7df3tyn/)我想为该区域图创作动画。我试着在this 问题的办法,但是这似乎没有帮助,因为我已经在D3区域图动画
var numberOfDays = 30;
var vis = d3.select('#visualisation'),
WIDTH = 1000,
HEIGHT = 400,
MARGINS = {
top: 20,
right: 20,
bottom: 20,
left: 50
};
var drawArea = function (data) {
var areaData = data;
// var areaData = data.data;
var xRange = d3.scale.linear().range([MARGINS.left, WIDTH - MARGINS.right]).domain([0, numberOfDays + 1]),
yRange = d3.scale.linear().range([HEIGHT - MARGINS.top, MARGINS.bottom]).domain([_.min(areaData), _.max(areaData)]);
var area = d3.svg.area()
.interpolate("monotone")
.x(function(d) {
return xRange(areaData.indexOf(d));
})
.y0(HEIGHT)
.y1(function(d) {
return yRange(d);
});
var path = vis.append("path")
.datum(areaData)
.attr("fill", 'lightgrey')
.attr("d", area);
};
var data = [1088,978,1282,755,908,1341,616,727,1281,247,1188,11204,556,15967,623,681,605,7267,4719,9665,5719,5907,3520,1286,1368,3243,2451,1674,1357,7414,2726]
drawArea(data);
,所以我不能用窗帘的方式相同SVG元素更多的图线。 我想从底部对区域进行动画处理。 任何想法/解释?
为了防止其他人陷入同样的问题,@thatOneGuy指出了确切的问题。我更新的小提琴是这里https://jsfiddle.net/sahils/o7df3tyn/14/
谢谢,很多解决它。只是好奇。我代表一个纯整数(实际上它是天数)所以不应该xRange(索引)与xRange(areaData.indexOf(d))相同。我尝试在evry迭代中打印我。它打印为1 2 3 4 ..以及。所以我对此有点困惑。可能是我没有得到这方面的功能是如何工作的。根据我的理解,它表示每个要绘制在xAxis上的值,y表示y轴上的值。 –
您的数据是一个整数数组,现在您只是在数组到达时对其进行绘图。所以第0天,第一天,第一天,第二天等等。所以最好的方法是使用'i'而不是现在使用indexOf。当你做补间时,你将值传递给区域函数,它会检查areaData是否为当前值,该值介于0和数据值之间,因此它永远不会找到它。要解决这个问题,只需使用'i'即可得到相同的输出 – thatOneGuy
明白了。非常感谢。 –