2013-03-22 28 views
9

Tôi tương đối mới với D3 và tôi không thể tìm ra lý do tại sao một số thứ không hoạt động .. Tôi muốn vẽ biểu đồ dạng đường với d3 và hoạt động tốt, nhưng tôi có vấn đề với các trục.d3 linechart chuỗi miền x trục

Với đoạn mã sau nó đi sai ở đâu đó và tôi không thấy làm thế nào để giải quyết ...

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; })); 

nếu d.age là một số nguyên (như 1; 2; 3 vv), nó hoạt động tốt. Nhưng tôi muốn dây trên trục x. như ("hà lan", "Anh", "Bỉ").

Vì vậy, nếu d.age là số nguyên, nó vẽ đồ thị ok, nếu d.age là một chuỗi nó không vẽ bất kỳ thứ gì.

Tôi cũng đã thử thay vì tuyến tính để sử dụng thứ tự, nhưng điều này đã đưa ra một biểu đồ không chính xác. (những đường nhìn kỳ lạ ...).

Hy vọng ai đó có thể giúp tôi.

Trả lời

17

Nếu bạn muốn sử dụng giá trị phân loại trên trục, bạn cần một thang đo phân loại (thứ tự). Hãy xem the documentation. Mã của bạn sẽ giống như

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; })); 

Lưu ý rằng đây sử dụng map để trích xuất các giá trị chuỗi - điều này có thể hoặc không thể được thực hiện trong trình duyệt cụ thể của bạn, xem here để biết thêm chi tiết.

+0

Thanx cho bạn phản ứng, tôi biết mình cần một quy mô thứ, nhưng điều này đã đưa ra một biểu đồ kỳ lạ như vậy .. (looping dòng vv). Nhưng tôi đã sử dụng dải thay vì rangeRoundBands. Vì vậy, điều này giải quyết vấn đề, (bây giờ tôi chỉ có một vấn đề nhỏ mà các điểm và xaxis không phải là trên cùng một mức độ. (Có một số thay đổi có thể nhìn thấy)). –

+0

Tôi đã tự hỏi tại sao sử dụng rangeRoundBands thay vì rangeBands? Có vẻ như nó tránh các hiện vật chống răng cưa, nhưng không chắc liệu có lý do nào khác mà bạn đã sử dụng nó hay không. Cảm ơn. – yoyodunno

+0

Đó là lý do duy nhất. –

5

Sử dụng

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

Đây là Fiddle Liên kết http://jsfiddle.net/sk2Cf/

+0

cảm ơn phản ứng của bạn. Nó đã được giải quyết với các giải pháp trên, nhưng giải pháp này bạn cung cấp cũng đã làm việc. Tôi sẽ ghi nhớ điều này. –

+0

Cảm ơn! Không thể tưởng tượng một giải pháp thanh lịch hơn. –

+0

Tôi chỉ tìm thấy câu hỏi này và đã thử câu đố, nhưng nó có cùng vấn đề như tôi hiện có trong mã của tôi: Vị trí x của biểu đồ không giống như vị trí x của nhãn x. Bạn có thể thấy nó tốt hơn nếu bạn loại bỏ nội suy. Vị trí x của dòng là vị trí trên cùng bên trái của thanh sẽ là nếu nó là biểu đồ thanh. – kel