Trước tiên, tôi sẽ xem xét sử dụng một trong các cân có sẵn Colorbrewer; xem colorbrewer2.org. Các tệp này cũng có sẵn dưới dạng tệp JavaScript và CSS trong kho lưu trữ git của D3; xem lib/colorbrewer. Ví dụ, nếu bạn có bốn giá trị rời rạc trong miền của bạn, và bạn muốn có một quy mô phân kỳ màu đỏ-xanh, bạn có thể nói:
var color = d3.scale.ordinal()
.domain(["6TH", "7TH", "5TH", "4TH"])
.range(colorbrewer.RdBu[4]);
(Bạn sẽ cần một <script src="colorbrewer.js"></script>
ở đâu đó trước đây, quá.) ColorBrewer có một loạt các quy mô màu sắc phân cấp, phân kỳ và phân loại được thiết kế tốt.
Nếu bạn nhấn mạnh vào việc cuộn thang màu của riêng mình, tôi khuyên bạn nên nội suy theo số L*a*b* or HCL color space để có nhận thức chính xác. Bạn có thể thực hiện việc này bằng cách sử dụng d3.interpolateLab hoặc d3.interpolateHcl. Ví dụ: d3.interpolateLab("red", "blue")(.5)
trả về một màu giữa màu đỏ và xanh lam.
Để tính toán màu cho dải phạm vi thứ tự của bạn, bạn có thể sử dụng bộ nội suy hoặc bạn có thể tìm thấy thang đo tuyến tính tạm thời thuận tiện hơn.Ví dụ:
var categories = ["6TH", "7TH", "5TH", "4TH"];
var color = d3.scale.ordinal()
.domain(categories)
.range(d3.range(categories.length).map(d3.scale.linear()
.domain([0, categories.length - 1])
.range(["red", "blue"])
.interpolate(d3.interpolateLab)));
Cập nhật: D3's Colorbrewer lib đã chuyển sang kho lưu trữ [d3-scale-chromatic] (https://github.com/d3/d3-scale-chromatic). – danasilver