Nếu bạn có miền có giới hạn miền là 0 log scale sẽ không hoạt động. Thang đo log cũng cung cấp cho bạn một hàm tick() với số lượng bọ ve không thể xác định được.
Nhiệm vụ hiện tại của tôi là hiển thị dữ liệu với các miền tùy ý và phạm vi trên biểu đồ phân tán tỷ lệ tuyến tính BUT tùy chọn người dùng có thể thay đổi theo thang đo logarit. Điều này bao gồm các miền có vấn đề [0, n] và [n, 0].
Đây là giải pháp tôi đưa ra để xử lý các trường hợp sau: Vấn đề có thể tránh được nếu chúng tôi đang sử dụng thang đo tuyến tính để đưa miền của chúng tôi đến phạm vi tùy ý với ranh giới tích cực. Tôi chọn [1,10] nhưng nó có thể lấy bất kỳ số dương nào. Sau đó, chúng ta có thể sử dụng thang log thông thường.
d3.scale.genericLog = function() {
return GenericLog();
};
function GenericLog() {
var PROJECTION=[1,10];
var linearScale, logScale;
linearScale=d3.scale.linear();
linearScale.range(PROJECTION);
logScale=d3.scale.log();
logScale.domain(PROJECTION);
function scale(x) {
return logScale(linearScale(x));
}
scale.domain = function(x) {
if (!arguments.length) return linearScale.domain();
linearScale.domain(x);
return scale;
};
scale.range = function(x) {
if (!arguments.length) return logScale.range();
logScale.range(x);
return scale;
};
scale.ticks = function(m) {
return linearScale.ticks(m);
};
return scale;
}
Cách sử dụng:
var scale1 = d3.scale.genericLog().domain([0,1]).range([500,1000]);
var scale2 = d3.scale.genericLog().domain([-10,0]).range([500,1000]);
scale1(0) //500
scale2(-10) //500
scale2(0) //100
tôi chỉ cần khoảng(), quy mô(), bọ ve() chức năng vì vậy tôi chỉ bao gồm những nhưng nó không nên mất hơn 5 phút để thực hiện tất cả những người khác. Ngoài ra: lưu ý rằng tôi đã sử dụng các giá trị tick() của thang tỷ lệ tuyến tính vì tôi phải giới hạn số lượng ve và dễ dàng hơn với thang đo tuyến tính.
EDIT: ĐƯỢC AWARE Tùy thuộc vào những gì bạn chọn làm DỰ BÁO, nó sẽ bóp méo quy mô nhật ký của bạn. Khoảng thời gian rộng hơn bạn sử dụng sẽ strecth phần dưới của quy mô của bạn nhiều hơn nữa.