2017-01-30 17 views
7

Tôi đang di chuyển tọa độ song song mã nguồn here sang phiên bản d3js mới nhất (d3js 4.5.0). Tôi bị mắc kẹt vào dòng này:D3js v4: scaleOrdinal không có dải điểm()

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

Dường như trong d3js v4, chức năng rangePoints không còn tồn tại nữa. Tôi có thể đổi thành d3. scaleOrdinal(), nhưng chỉ có chức năng range, không phải là chức năng rangePoints. Bất kỳ đầu mối về điều này?

Trả lời

10

Trong D3 v4, hai vảy mới đã được tạo: scaleBandscalePoint, hiện có một số tính năng mà scale.ordinal có trong phiên bản 3 (trong số đó là rangePoints).

Nó được ghi lại trong changelog:

Tương tự, ordinal.rangePoints và phương pháp ordinal.rangeRoundPoints đã được thay thế bằng một lớp con mới có quy mô thứ: thang điểm. Các mã sau đây trong 3.x:

var x = d3.scale.ordinal() 
.domain(["a", "b", "c"]) 
.rangePoints([0, width]); 

là tương đương với này trong 4.0:

var x = d3.scalePoint() 
.domain(["a", "b", "c"]) 
.range([0, width]); 

Do đó, quy mô bạn cần ở đây là scalePoint:

thang điểm là một biến thể của quy mô băng tần với băng thông cố định về không. Thang điểm thường được sử dụng cho các ô tán xạ có thứ nguyên thứ tự hoặc phân loại.

Do đó, thay đổi quy mô của bạn để:

var x = scalePoint() 
    .range([0, width]) 
    .padding(.1); 

chú ý Pay đến padding: trong một thang điểm, range chỉ chấp nhận các mảng phạm vi, không phải là đệm nữa.