2012-03-06 35 views
16

Sử dụng jQuery Flot, tôi có thể chuyển giá trị null cho cơ chế vẽ đồ họa để nó không vẽ bất kỳ thứ gì trên lô. Xem cách các hồ sơ còn thiếu đang bị đàn áp:Chuyển giá trị null vào đường dẫn SVG (sử dụng d3.js) để chặn dữ liệu bị thiếu

enter image description here

tôi đang tìm cách để chuyển sang d3js, vì vậy mà tôi có thể kiểm soát mức độ thấp sâu sắc hơn về đồ họa sử dụng SVG. Tuy nhiên, tôi vẫn chưa tìm ra cách để thực hiện cùng một quy trình ức chế các bản ghi còn thiếu. Hình ảnh bên dưới là một nỗ lực để thực hiện việc này, sử dụng giá trị 0 thay vì null (trong đó gói d3 bị hỏng). Dưới đây là một số mã để cung cấp cho bạn một ý tưởng về làm thế nào tôi sản xuất đồ thị dưới đây:

var line = d3.svg.line() 
    .x(function(d) { 
     var date = new Date(d[0]); 
     return x(date); 
    }) 
    .y(function(d) { 
     var height = d[1]; 
     if (no_record_exists) { 
      return y(0); 
     } 
     return y(height) + 0.5; 
    }); 

enter image description here

Tôi nhìn lên các yếu tố SVG path tại Developer Network Mozilla, và tôi phát hiện ra rằng có một Lệnh MoveTo, M x y, chỉ di chuyển "bút" đến một số điểm mà không cần vẽ bất kỳ thứ gì. Điều này đã được thực hiện trong gói d3js, sao cho tôi không phải tạo ra một số phần tử path mỗi lần tôi gặp phải một bản ghi bị thiếu?

+2

Lưu ý rằng việc sử dụng MoveTo sẽ là tuyệt vời vì có khoảng trống trong một dòng đơn giản (đột quỵ), nhưng sẽ không làm việc với màu xanh lá cây điền bạn hiển thị ở trên. Đối với điều đó, bạn cần các hình dạng riêng biệt hoặc các lệnh đường dẫn thừa để thả xuống đường cơ sở, đi qua số tiền chính xác và quay lại một lần nữa. – Phrogz

+0

Yêu thích các đồ thị, nhưng xem thêm: http://stackoverflow.com/questions/15259444/drawing-non-continuous-lines-with-d3 –

Trả lời

27

Chức năng defined của d3.svg.line() là cách để làm điều này

Hãy nói rằng chúng tôi muốn bao gồm một break trong bảng xếp hạng nếu y là null:

line.defined(function(d) { return d.y!=null; }) 
+0

@Kit, vui lòng đánh dấu câu trả lời này là – Amit

+0

Đây là lời cảm ơn tuyệt vời! –

18

Sử dụng line.defined hoặc area.defined và xem ví dụ Area with Missing Data.

+1

Cảm ơn, tôi sẽ xem xét điều này. Trên thực tế tôi chỉ nêu ra một vấn đề tại Github liên quan đến điều này :) Không thực sự chắc chắn làm thế nào để di chuyển về phía trước với nó mặc dù: (https://github.com/mbostock/d3/issues/583 – Kit

+2

Có gì d3.split? Không có gì trên trang đó Có lẽ cũng nên cập nhật câu trả lời của bạn, vì http://stackoverflow.com/questions/15259444/drawing-non-continuous-lines-with-d3 giờ đây cho biết cách thực hiện. –

Các vấn đề liên quan