矩形の位置を再計算する必要があります。これは再描画イベントで行うことができますが、長方形の作成中に使用した乱数を生成する必要があります。
以下のコードをループ内に追加すると、各矩形の座標が保存されます。
rectangle = {
start: start,
len: len,
ystart: ystart,
yend: yend,
element: chart.renderer.rect(x1, y2, x2 - x1, y1 - y2)
.attr({
fill: 'blue'
}).add()
};
chart.rectangles.push(rectangle);
再描画時には、ズーム後にx軸とy軸がスケールを変更した新しいスケールに基づいて位置を再計算します。
events: {
redraw: function() {
var xAxis = this.xAxis[0],
yAxis = this.yAxis[0];
this.rectangles.forEach(function (rect) {
var x1 = xAxis.toPixels(rect.start),
x2 = xAxis.toPixels(rect.len),
y1 = yAxis.toPixels(rect.ystart),
y2 = yAxis.toPixels(rect.yend);
rect.element.attr({
x: x1,
y: y2,
width: x2 - x1,
height: y1 - y2
});
});
}
例:あなたが例で見ることができるようにズームするときhttp://jsfiddle.net/n2549ewg/4/
、rectsも大きな得ます。そのような動作を避けたい場合は、幅と高さを変更しないでください。矩形は位置が調整されますが、サイズは変わりません。
例:http://jsfiddle.net/n2549ewg/5/
[OK]を...あなたの答えは、理にかなって、両方のフィドルに、「ズームをリセット」の正しいyの位置に長方形をリセットされません。また、ズームすると、長方形が下の軸に残りません。高さは決して変えてはいけません...幅だけです。 – mattjvincent
はい、私は底面に50ピクセルのy点を移動し直しませんでした。これもrectの値に含める必要があります。しかし、私の説明は正しいです - rectの座標を軸の値に変換し、再描画するとピクセルに変換するので、座標を再配置することができます。値の高さが必要な場合は、そのままにしておきます。値とピクセルを変換しないでください。 – morganfree