2015-11-26 86 views
3

我有兩個具有多個軸的Highcharts。兩組軸表示相同的單位,兩個圖表是水平對齊的。我創建了一個的jsfiddle根據Highchart sample來說明我的設置:Highchart多軸 - 多個圖表上的同步軸

http://jsfiddle.net/dennismadsen/gbbzz2jh/

Highchart multi axes sample

在這個例子中,你可以在圖表的左邊y軸上放大。請注意右圖上的軸是同步的。這就是使用這種afterSetExtremes事件做:

function syncYAxis(e) { 
    var thisAxis = this; 
    var thisChart = e.currentTarget.chart; 

    Highcharts.each(Highcharts.charts, function (chart) { 
     if (chart && chart !== thisChart) { 
      var currentAxis = chart.get(thisAxis.options.id); 
      currentAxis.setExtremes(e.min, e.max); 
     } 
    }); 
} 

如果我改變右圖到不同的Highchart,但這不再工作。看到這個的jsfiddle:

http://jsfiddle.net/dennismadsen/kmuhw0zf/

我試圖調試,並添加了afterSetExtremes事件向右圖表軸:

function rightChartAxisChanged(e) { 
    var thisAxis = this; 
    console.log('Right chart axis changed: '+thisAxis.options.id); 
    console.log('min/max: '+e.min+','+e.max); 
    console.log('user min/max: '+e.userMin+','+e.userMax); 
} 

從我所看到的,似乎新的最小值/計算出的e.mine.max中的最大值錯誤。我在syncYAxissetExtremes調用中給出的正確值存儲在e.userMine.userMax中。

+0

所以在第二個小提琴中,當我放大第一張高圖時,第二張也放大了。這意味着它們同步。你能告訴我你想同步什麼excally – void

+0

似乎也適合我工作。你能否敘述什麼是不正確的/不行的,或者我們如何一步一步地複製你的問題? –

回答

2

嗯,我試過你的演示(http://jsfiddle.net/dennismadsen/kmuhw0zf/) - 它工作正常,除了有時失敗。無論如何,我會改善與tickPositioner邏輯的第二個圖表:這樣蜱總是會得到相同的數字中的第一個,例如:http://jsfiddle.net/kmuhw0zf/3/

 tickPositioner: function() { 
      return $('#chart1').highcharts().get('axis1').tickPositions.slice(); 
     }, 
     id: 'axis1', 

此外,您可以設置alignTicks爲false,所以它會防止Highcharts邏輯在特定位置強制剔號。

和關於e.min/e.max VS a.userMin/e.userMax - 你可以設置例如最大= 32.1235,這將被存儲在e.userMax,但圖表將呈現最大值= 35(一個不錯的刻度數),所以e.max將是35請注意,對於我來說,你的兩個演示都可以正常工作(除了問題alignTicks)。