Ich habe ein Flächendiagramm (siehe js fiddle https://jsfiddle.net/o7df3tyn/) Ich möchte dieses Flächendiagramm animieren. Ich versuchte, den Ansatz in this Frage, aber das scheint nicht zu helfen, weil ich mehr Liniendiagramme im gleichen svg Elemente habeD3 Flächendiagrammanimation
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);
So kippe ich den Vorhang Ansatz. Ich möchte den Bereich von unten animieren. Irgendwelche Ideen/Erklärungen?
Nur für den Fall, dass jemand anderes in dem gleichen Problem steckte, @thatOneGuy das genaue Problem genagelt. Meine aktualisiert Geige ist hier https://jsfiddle.net/sahils/o7df3tyn/14/
Danke, viel, dass es gelöst hat. Nur neugierig.Ich stelle eine ganzzahlige Ganzzahl dar (eigentlich ist es die Anzahl der Tage) Also sollte xRange (index) nicht gleich xRange (areaData.indexOf (d)) sein. Ich habe versucht, in jeder Wiederholung zu drucken. es druckt als 1 2 3 4 .. ebenso. Also bin ich etwas verwirrt darüber. Vielleicht verstehe ich nicht, wie diese Bereichsfunktion funktioniert. Meines Erachtens bezeichnet es jeden Wert, der auf xAxis aufgetragen werden soll, wobei d in der y-Funktion den Wert auf der Y-Achse angibt. –
Ihre Daten sind ein Array von ganzen Zahlen, in dem Moment, in dem Sie es nur zeichnen, wenn sie in dem Array ankommen. Also Tag 0, ist der erste, Tag 1, ist der zweite und so weiter. Der beste Weg dies zu tun wäre, 'i' zu benutzen, anstatt das, was Sie jetzt haben, was indexOf verwendet. Wie beim Tween übergibt man die Werte an die Bereichsfunktion und überprüft, ob die AreaData für den aktuellen Wert zwischen 0 und dem Datenwert liegt, damit atm nicht gefunden wird. Um dies zu lösen, verwenden Sie einfach "i", was die gleiche Ausgabe liefert. – thatOneGuy
Danke vielmals. –