Đây sẽ là một thay thế cho thang đo log để nó có thể xử lý các số âm. Đã không nhìn thấy nhiều ví dụ về quy mô tùy chỉnh mặc dù tôi đã cố gắng sử dụng nguồn của quy mô lôgarit của d3 làm điểm bắt đầu.Tạo một kích thước asinh (ngược hyperbol sin) trong d3.js v4
Trả lời
Ví dụ tốt nhất trong tài liệu có vẻ là tính năng nội suy của thang đo. Xem https://github.com/d3/d3-scale/blob/master/README.md#continuous-scales
var color = d3.scaleLinear()
.domain([10, 100])
.range(["brown", "steelblue"])
.interpolate(d3.interpolateHcl);
Tôi không thực sự là chuyên gia d3 vì vậy tôi hy vọng điều đó sẽ hữu ích.
Theo như tôi biết không có cách nào để thực hiện quy mô tùy chỉnh trong D3 (ít nhất là không theo nghĩa bạn đang tìm kiếm). Tất cả quy mô D3 mở rộng theo hai bước:
- sử dụng tên miền, deinterpolate đầu vào cho một hàm deinterpolation
- sử dụng phạm vi, nội suy các kết quả trung gian từ bước 1 để có được sản lượng
tôi tin rằng câu trả lời lý tưởng của bạn về cơ bản sẽ trả lời câu hỏi, "làm cách nào để đặt chức năng nội suy của quy mô D3 thành chức năng tùy chỉnh?" và tôi không nghĩ rằng điều này hiện có thể thực hiện được.
Tuy nhiên, bạn có thể đặt chức năng nội suy. Ví dụ này từ Mike Bostock cho thấy cách đặt nội suy bằng cách sử dụng một trong các chức năng dễ dàng cài sẵn của D3: http://bl.ocks.org/mbostock/56ea94205411ee9e4dbec3742f7ad08c
Ví dụ này có tác dụng "ống kính mắt cá", có lẽ là ngược lại với những gì bạn muốn. Bạn có thể sử dụng hàm nới lỏng đa thức, d3.easePolyInOut
, với số mũ nhỏ hơn một để có được thứ gì đó gần gũi hơn với việc chia tỷ lệ nhật ký (xem đoạn mã của tôi). Thật không may, không có "logInOut" hoặc "asinhInOut", vì vậy nếu bạn cần một rolloff dốc hơn (so với đa thức), thì bạn sẽ phải viết chức năng nới lỏng/nội suy của riêng bạn.
var data = Array.from(Array(21), (_,i)=>{return 10*(i-10)})
var svg = d3.select("svg"),
margin = {top: 50, right: 20, bottom: 5, left: 20},
width = svg.attr("width") - margin.left - margin.right,
height = svg.attr("height") - margin.top - margin.bottom,
g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var polyexp = 0.25
var x = d3.scaleLinear()
.domain([-100,100])
.range([0, width])
.interpolate(easeInterpolate(d3.easePolyInOut.exponent(polyexp)));
g.append("g")
.attr("class", "axis axis--x")
.call(d3.axisBottom(x));
g.selectAll("circle").data(data).enter().append("circle")
.attr("cx", (d) => x(d))
.attr("cy", -10)
.attr("r", 3)
.attr("fill", "steelblue")
function easeInterpolate(ease) {
return function(a, b) {
var i = d3.interpolate(a, b);
return function(t) {
return i(ease(t));
};
};
}
.axis text {
font: 10px sans-serif;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.3.0/d3.js"></script>
<svg width="600" height="100"></svg>
- 1. Thay đổi kích thước svg khi cửa sổ được thay đổi kích thước trong d3.js
- 2. {d3.js} di chuyển v3 sang v4: mã hoạt động trên v3 (d3.layout.stack()) lỗi v4 (d3.stack())
- 3. Cách đặt nguồn gốc trong khi kéo trong d3.js trong v4
- 4. d3.js Thêm một vòng tròn trong d3.geo.path
- 5. Tạo trục ngang vô tận với d3 v4
- 6. d3.js v4 chuyển đổi liên kết wacky trong ví dụ cây đóng mở
- 7. D3 v4: Cập nhật bố cục lực
- 8. Làm thế nào để không duy trì tỉ lệ khi thay đổi kích thước một hình ảnh trong d3.js
- 9. Cài đặt đúng D3 v4 vào Angular2
- 10. Raphael JS thay đổi kích thước Canvas
- 11. Chuyển tiếp D3.js
- 12. Làm thế nào để tạo một ứng dụng DPI-aware có kích thước và thay đổi kích thước theo kích thước tương thích ngược với Windows 7?
- 13. Đồ thị phân lớp trong d3.js
- 14. d3.js và document.onReady
- 15. màu trong suốt trong javascript D3.js
- 16. D3.js vs Raphael.js
- 17. Cách dễ dàng để tải d3-selection-multi cùng với d3 v4 trong RequireJS là gì?
- 18. Đóng gói vòng tròn có thể phóng to có định kích thước văn bản tự động trong D3.js
- 19. Tạo âm thanh sóng sin trong Python
- 20. Vùng xếp chồng trong D3.js
- 21. vòng tròn tránh chồng chéo d3.js
- 22. csv để mảng trong d3.js
- 23. Vô hiệu hóa bàn chải d3 thay đổi kích thước
- 24. Zoom.scaleExtent() làm gì trong d3.js?
- 25. d3 js làm hình ảnh
- 26. Làm cách nào để điều chỉnh kích thước thu phóng cho một điểm trong D3?
- 27. D3.js: 'g' trong .append ("g") mã D3.js là gì?
- 28. d3.js thay đổi màu sắc và kích thước trên biểu đồ đường chấm trên di chuột
- 29. Một ví dụ phân tán đơn giản trong D3.js?
- 30. Hộp giới hạn trong D3.js