2013-03-22 26 views
9

D3'e göreceli olarak yeniyim ve bir şeyin neden çalışmadığını anlayamıyorum .. D3 ile çizgi grafik çizmek istiyorum ve bu iyi çalışıyor, ama eksenlerle ilgili problemlerim var. Aşağıdaki kodu yanlış yerde gider ve nasıl çözüleceğini görmüyorum iled3 linechart domen etki alanı x ekseni

...

var x = d3.scale.linear() 
.range([0, width]); 

var xAxis = d3.svg.axis() 
.scale(x) 
.orient("bottom"); 

x.domain(d3.extent(data, function(d) { return d.age; })); 

d.age bir tamsayı (1 gibi; 2; 3 vb) ise, bu işleri iyi. Ama x ekseninde ipler istiyorum. gibi ("hollanda", "İngiltere", "Belçika").

Yani, d.age bir tamsayıysa, grafiği çizer, eğer d.age bir dizgidir, hiçbir şey çizmez.

Ayrıca ordinal kullanmak için doğrusal yerine çalıştı, ancak bu yanlış bir grafik verdi. (garip görünümlü çizgiler ...). Birisinin bana yardımcı olabileceğini umuyorum.

cevap

17

Kategorik değerler bir eksende kullanmak isterseniz, kategorik (sıralı) bir ölçeğe ihtiyacınız vardır. the documentation'a bir göz atın. Bu veya belirli bir tarayıcıyla uygulanabilir olmayabilir fazla ayrıntı için here bakınız - Kodunuz bu dize değerlerini ayıklamak için map kullandığı

var x = d3.scale.ordinal().rangeRoundBands([0, width]); 
var xAxis = d3.svg.axis().scale(x).orient("bottom"); 

x.domain(data.map(function(d) { return d.country; })); 

Not benzer görünümde olacaktır. İşte Kullanım

var x = d3.scale.ordinal().rangePoints([0, width]); 

+0

Thanx olduğunu (vs hatları döngü) .. Ben bir skala gerekli biliyordum, ama bu tür garip grafiği verdi. Ama rangeRoundBands yerine aralık kullanmıştım. Yani bu problemi çözdü, (şimdi noktaların ve xaxilerin aynı seviyede olmadığına dair küçük bir problemim var. (Bazı değişimler görülebilir)). –

+0

Neden rangeBands yerine rangeRoundBands kullanıldığını merak ediyordum? Antialiasing eserlerinden kaçınıyor gibi görünüyor, ama kullandığınız başka bir sebep varsa emin değilim. Teşekkürler. – yoyodunno

+0

Tek neden bu. –

5

size reaksiyon için keman Bağlantı http://jsfiddle.net/sk2Cf/

+0

Tepkiniz için teşekkürler. Yukarıdaki çözümle zaten çözüldü, ancak sağladığınız bu çözüm de işe yaradı. Bunu aklımda tutacağım. –

+0

Teşekkürler! Daha zarif bir çözüm düşünemiyorum. –

+0

Bu soruyu yeni buldum ve kemanı denedim, ancak şu anda benim kodumda da var olan aynı sorun var: Grafiğin x-konumu x-scale etiketlerinin x-konumu ile aynı değil. Enterpolasyonu kaldırırsanız daha iyi görebilirsiniz. Çizginin x-konumu, bir çubuğun üst sol pozisyonunun, bir çubuk grafikse nerede olacağıdır. – kel

İlgili konular