1

グラフに注釈を付けるためにflotsdrawOverlayフックを使用しています。を使用して位置から y 軸座標を計算するp2cと、わずかなオフセットがあることに気付きました。を突っ込んでみると、 を追加するとうまくいくように見えyaxis.box.topますが、これが正しいアプローチかどうかはわかりません。

ここでフィドル。

私が話していることをイメージしてください:

ここに画像の説明を入力

コード:

$(function () {

 overlayThresholdHook = function(plot, ctx) {

        var threshold = plot.getOptions().thresholdY;

        if (threshold == -1) return;

        var axes = plot.getAxes();
        var xStart = axes.xaxis.box.left;
        var xStop = axes.xaxis.box.width + xStart;
        var yCor = axes.yaxis.p2c(threshold);// + axes.yaxis.box.top;

        ctx.font = '9pt Arial';
        ctx.strokeStyle = 'blue';
        ctx.fillStyle = 'blue';
        ctx.lineWidth = 2;
        ctx.textAlign = 'left';
        ctx.textBaseline = 'middle';

        ctx.fillText(threshold+'',xStart,yCor);

        ctx.beginPath();
        ctx.moveTo(xStart+ctx.measureText(threshold+'').width+2, yCor);
        ctx.lineTo(xStop, yCor);
        ctx.stroke();
    }    

    var options = { legend: {show: false}, yaxis: {min: -120, max: 150, show: true}, thresholdY: 100, hooks: {drawOverlay: [overlayThresholdHook]}   };
    var plot0 = $.plot($("#plot0"), [ {"data":[[1,-0.998195931084865],[45,2.26027181085055]],"color":"#C0D800","points":{"symbol":"circle"}}], options);
    plot0.triggerRedrawOverlay();
});
4

1 に答える 1

0

計算を間違えていました。プロット オフセットを考慮する必要があります。適切な方法で y 座標を取得するには:

var axes = plot.getAxes();
var plotOffset = plot.getPlotOffset();
var yCor = axes.yaxis.p2c(threshold) + plotOffset.top;
于 2013-10-03T16:34:37.657 に答える