0

我正在尝试在 HighCharts 中制作一个带有注释的柱形图,这些注释在图表调整大小或缩放时会正确重新定位。

http://jsfiddle.net/2tJ3G/

您可以通过调整图表周围的框架来了解我的意思。注释保留在应有的位置。

仅当从缩放中调用此重绘函数时才会出现问题。图表只是重新加载。我已经成功地为重绘事件提供了一个功能,但这完全破坏了选择缩放(它只显示所有数据)。这是我的处理程序:

function drawIt() {
    var optionsTmp = options;  
    chart = new Highcharts.Chart(optionsTmp, function(chart) {

    var text, box, point;
    var count = 0;
    for (var annotX in annots) {
        var annot = annots[annotX];
        if (annot.length > 0) {
           //draw rectangles / text with annot vals
        }
        count++;
    }
});
options = optionsTmp;
}

有可能我没有正确地通过缩放 ( options.xAxis.min) 的新极端,但试图将它传递给处理程序并没有给我太多运气。

有任何想法吗?

4

2 回答 2

0

问题是您正在尝试删除图表并创建新图表-仅通过设置空容器是不可能的-您还需要销毁图表。但这仍然不可能在重绘时破坏图表 - 它会导致错误。

我认为您应该尝试另一种解决方案,例如更新该注释。类似的事情在这里做了额外的点线,见:http ://www.highcharts.com/jsbin/oyadep/4/edit#javascript,live

当然,它还没有完成,但在放大时可以正常工作。

function drawPaths(options) {
var maxNum = 2;


//add the paths
group_init = options.renderer.g().add();
// console.log(options);
for (i = 0; i < maxNum; i++) {

    $.each(options.series[i].data, function(i2, point) {
        var xpos = options.xAxis[0].translate(this.x);
        var ypos = options.yAxis[0].translate(this.y, false, true);
        var gr = this.y; //gross revenue
        var p_gr = 0; //for tests
        var eq; //equation
        var my;
        //console.log(this);
        eq = gr + 1; //equation
        my = options.yAxis[0].translate(eq, false, true);
        //console.log(xpos, ypos, my);
        options.renderer.path(['M', xpos + 105, ypos + 5, 'L', xpos + 105, my + 5]).attr({
            'stroke-width': 1,
            stroke: '#ad2b2b'
        }).add(group_init);

    });
}
}
于 2013-03-08T11:27:37.913 回答
0

长话短说,我的 setExtremes 函数(在完全重绘图表之前被调用)正踩在下面的重绘函数的脚上。我不得不在那里设置阈值并尽早将其静音。

            setExtremes: function(e) {
                doZoom = true; 
                min= e.min; 
                max = e.max;
                e.preventDefault();
                e.stopPropagation();
            }

更正的小提琴:

http://jsfiddle.net/9LgUf/1/

于 2013-03-18T21:57:42.060 回答