için bir x-değerlerinin için sütun ve birden diğer sütunlara dosyası veri CSV temsil edilmiştir Say y her serinin-değerleri:
x,y1,y2
5,90,22
25,30,25
45,50,80
65,55,9
85,25,95
İsterseniz Kod tamamen jenerik olacak, ilk olarak ["y1", "y2"]
gibi dizilerin isimlerini hesaplamanız gerekir. (CSV dosyasına üçüncü bir sütun eklediyseniz, ["y1", "y2", "y3"]
olabilir.) Adları, bir nesneden adlandırılmış özellikleri ayıklar olan d3.keys kullanarak hesaplayabilirsiniz. Örneğin, d3.keys({foo: 1, bar: 2})
, ["foo", "bar"]
'u döndürür.
Artık dizi adlarına sahip olduğunuzdan, bir dizi nokta dizisi oluşturabilirsiniz. Dış dizi (iki tane var) diziyi temsil eder ve iç diziler veri noktalarını depolar. Aynı anda kodları tutarlı bir gösterime (x
ve y
özelliklerine sahip nesneler) dönüştürebilirsiniz, böylece kodları dizi genelinde yeniden kullanabilirsiniz.
// Map the data to an array of arrays of {x, y} tuples.
var series = seriesNames.map(function(series) {
return data.map(function(d) {
return {x: +d.x, y: +d[series]};
});
});
Not bu kod numaralarına CSV değerleri zorlamak için +
operatörünü kullanır. (CSV dosyaları yazılmamış, bu nedenle başlangıçta dizelerdir.
Verilerinizi düzenli bir biçimde eşlediğinizden, her bir seri için G öğeleri oluşturabilir ve ardından her bir nokta için öğeleri daire içine alabilirsiniz. Oluşan SVG yapısı aşağıdaki gibi görünecektir:
<g class="series">
<circle class="point" r="4.5" cx="1" cy="2"/>
<circle class="point" r="4.5" cx="3" cy="2"/>
…
</g>
<g class="series">
<circle class="point" r="4.5" cx="5" cy="4"/>
<circle class="point" r="4.5" cx="7" cy="6"/>
…
</g>
Ve tekabül D3 kodu:
// Add the points!
svg.selectAll(".series")
.data(series)
.enter().append("g")
.attr("class", "series")
.style("fill", function(d, i) { return z(i); })
.selectAll(".point")
.data(function(d) { return d; })
.enter().append("circle")
.attr("class", "point")
.attr("r", 4.5)
.attr("cx", function(d) { return x(d.x); })
.attr("cy", function(d) { return y(d.y); });
Ben de bir dolgu stilini ekleyerek her serisi benzersiz bir renk atamak için kod biraz ekledik içeren G elemanına. Elbette bunu yapmak için birçok farklı yol var. (Örneğin, her bir dizinin rengi hakkında daha spesifik olmak isteyebilirsiniz.) Ayrıca, x ve y ölçeklerinin etki alanlarını hesaplayan kodun dışında kaldım (ayrıca eksenleri oluştururken), ancak tüm çalışma örneği görmek istiyorsanız: çözüm
Neredeyse bir öğretici ... Bu ve Mike Bostock tarafından yapılan uzun cevaplarla cevaplanan diğer benzer sorular SSS'ye konmalıdır. – paxRoman