Tôi đang sử dụng d3j để hiển thị đại diện thời gian thực cho lượt xem trang web. Đối với điều này, tôi sử dụng bố cục ngăn xếp và tôi cập nhật tập dữ liệu của mình bằng JSON tại thời điểm này.Chỉ hiển thị toàn bộ giá trị dọc theo trục y trong d3.js khi phạm vi là 0-1 hoặc 0-2
Khi chỉ có 1 hoặc 2 chế độ xem được hiển thị trên trục y, động liên quan đến số lượt xem trong biểu đồ, nhãn trục là: 1 =>0, 0.2, 0.4, 0.6, 0.8, 1
, nhãn trục là: 2 =>0, 0.5, 1, 1.5, 2
Điều này không có ý nghĩa đối với tập dữ liệu của tôi vì số liệu này hiển thị lượt xem trang và bạn không thể có một nửa lượt xem.
Tôi có một quy mô tuyến tính trong d3js tôi căn trục y của tôi trên
var y_inverted = d3.scale.linear().domain([0, 1]).rangeRound([0, height]);
Theo the documentation of rangeRound() tôi chỉ sẽ nhận được toàn bộ giá trị ra khỏi quy mô này. Đối với bản vẽ trục của tôi, tôi sử dụng:
var y_axis = svg.append("g")
.attr("class", "y axis")
.attr("transform", "translate(0,0)")
.call(y_inverted.axis = d3.svg.axis()
.scale(y_inverted)
.orient("left")
.ticks(5));
Bởi vì nó là một ứng dụng thời gian thực để cập nhật này mỗi giây bằng cách gọi:
function update(){
y_inverted.domain([yStackMax, 0]);
y_axis.transition()
.duration(interval)
.ease("linear")
.call(y_inverted.axis);
}
yStackMax được tính từ một stacklayout, như xa như tôi biết các dữ liệu sử dụng cho các giá trị y chỉ chứa số nguyên.
var yStackMax = d3.max(layers, function(layer) {
return d3.max(layer, function(d) {
return d.y0 + d.y;
});
});
Tôi đã thử một vài cách để có được giá trị thích hợp cho trục y của tôi.
d3.svg.axis()
.scale(y_inverted)
.orient("left")
.ticks(5).tickFormat(d3.format(",.0f"))
Got me gần nhất sofar, nhưng nó vẫn hiển thị 0, 0, 0, 1, 1, 1
Về cơ bản những gì tôi muốn là chỉ có 1 đánh dấu khi yStackMax
là 1, 2 ve khi đã ghi bàn 2, nhưng nó cũng sẽ làm việc nếu yStackMax
là 12 hoặc 1.000.000
btw, nếu bạn đang hạnh phúc với một trong những câu trả lời, xin vui lòng chấp nhận nó. – Juve