d3js を使用して、Web サイトのビューをリアルタイムで表示しています。このためにスタック レイアウトを使用し、現時点では JSON でデータセットを更新しています。
グラフ内のビューの量に動的に関連する y 軸に 1 つまたは 2 つのビューしか表示されていない場合、軸ラベルは次のようになります: 1 => 0, 0.2, 0.4, 0.6, 0.8, 1
、軸ラベルは次のとおりです: 2 =>0, 0.5, 1, 1.5, 2
これは意味がありませんページのビューを表示し、半分のビューを持つことはできないため、私のデータセットです。
私はy軸のベースとなるd3jsに線形スケールを持っています
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ティック、2の場合は2ティックだけですが、 12または1,000,000yStackMax
の場合にも機能するはずですyStackMax