我正在使用 d3js 来显示网站视图的实时表示。为此,我使用堆栈布局,并且我现在通过 JSON 更新我的数据集。
当 y 轴上只显示 1 或 2 个视图时,这与图中的视图数量是动态相关的,轴标签为:1 => 0, 0.2, 0.4, 0.6, 0.8, 1
,轴标签为:2 =>0, 0.5, 1, 1.5, 2
这对于我的数据集,因为它显示页面的视图,并且您不能有一半的视图。
我在 d3js 中有一个线性比例,我的 y 轴基于
var y_inverted = d3.scale.linear().domain([0, 1]).rangeRound([0, height]);
根据rangeRound() 的文档,我应该只得到超出这个比例的整个值。为了绘制我的轴,我使用:
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));
因为它是一个实时应用程序,所以我通过调用每秒更新一次:
function update(){
y_inverted.domain([yStackMax, 0]);
y_axis.transition()
.duration(interval)
.ease("linear")
.call(y_inverted.axis);
}
yStackMax 是根据堆栈布局计算的,据我所知,用于 y 值的数据仅包含整数。
var yStackMax = d3.max(layers, function(layer) {
return d3.max(layer, function(d) {
return d.y0 + d.y;
});
});
我已经尝试了几件事来为我的 y 轴获得一个合适的值。
d3.svg.axis()
.scale(y_inverted)
.orient("left")
.ticks(5).tickFormat(d3.format(",.0f"))
让我到目前为止最近,但它仍然显示0, 0, 0, 1, 1, 1
基本上我想要的是在 1 时只有 1 个刻度yStackMax
,在 2 时只有 2 个刻度,但如果yStackMax
是 12 或 1,000,000 ,它也应该工作